Also, do y’all call main() in the if block or do you just put the code you want to run in the if block?

  • Eager Eagle@lemmy.world
    link
    fedilink
    English
    arrow-up
    32
    ·
    edit-2
    3 days ago

    I work in an academic / research environment. Depending who wrote it, even seeing a __name__ == "__main__" is a bit of a rare thing…

    • SpaceNoodle@lemmy.world
      link
      fedilink
      arrow-up
      23
      ·
      3 days ago

      Academic code is absolutely horrific.

      Fortunately, it is possible to translate it for practical applications.

    • ℍ𝕂-𝟞𝟝@sopuli.xyz
      link
      fedilink
      English
      arrow-up
      15
      ·
      3 days ago

      Do you also have nothing but love for those 50+ cell Jupyter notebooks that don’t use a single function and have everything in the global scope?

      • Eager Eagle@lemmy.world
        link
        fedilink
        English
        arrow-up
        14
        ·
        3 days ago

        the best thing is when not even the author knows the correct order of running the cells; because of course it isn’t top-to-bottom.

        • ℍ𝕂-𝟞𝟝@sopuli.xyz
          link
          fedilink
          English
          arrow-up
          11
          ·
          3 days ago

          Yeah, and also zero dependency management, so you are free to figure out what combination of Python, Tensorflow and Keras will make it not throw random exceptions.

          And don’t forget the number one rule: you must use all the graphing libraries, all the time.

    • brian@programming.dev
      link
      fedilink
      arrow-up
      4
      ·
      2 days ago

      python isn’t the only language to do “execute everything imported from a particular file and all top level statements get run”. both node and c# (but with restrictions on where top level statements can be) can do that type of thing, I’m sure there’s more.

      python conventions are unique because they attempt to make their entrypoint also importable itself without side effects. almost no one needs to do that, and I imagine the convention leaked out from the few people that did since it doesn’t hurt either.

      for instance in node this is the equivalent, even though I’ve never seen someone try before:

      if (path.resolve(url.fileURLToPath(import.meta.url)).includes(path.resolve(process.argv[1])))
      {
        // main things
      }