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?

    • fox [comrade/them]@hexbear.net
      link
      fedilink
      English
      arrow-up
      5
      ·
      1 month ago

      I recall that Gondor very much needed a king to return, like it was a pretty big deal that returning as king to Gondor was a necessary deal. Gondor needed Aragorn to return as king. It’s all documented in the third book, The Return of the King.

  • ryannathans@aussie.zone
    link
    fedilink
    arrow-up
    20
    ·
    1 month ago

    They do different things lol

    The main functions define entry points and the python example executes the code only if that script was invoked directly

    • Fushuan [he/him]@lemm.ee
      link
      fedilink
      arrow-up
      4
      ·
      1 month ago

      Agreed, when building the wheel in python we can also define entry points like a main function, and run it the same way the compiled C code is run.

      These people are comparing the interpreted raw python code to a compiled C binary. My dudes, bash doesn’t have a main function either and no one is fucking complaining.

      • chaospatterns@lemmy.world
        link
        fedilink
        English
        arrow-up
        8
        ·
        edit-2
        1 month ago

        bash doesn’t have a main function either and no one is fucking complaining.

        I don’t complain about Bash’s lack of features because I choose not to write Bash scripts and instead use saner languages.

        • Fushuan [he/him]@lemm.ee
          link
          fedilink
          arrow-up
          3
          ·
          1 month ago

          What other saner languages do you use for scripts, though? All scripting languages share the particular complaint showcased in this post.

            • Fushuan [he/him]@lemm.ee
              link
              fedilink
              arrow-up
              3
              ·
              1 month ago

              You mean the “want to be zsh but with a specific config instead of having the liberty to do anything” shell? /s

              Jokes aside, regardless of your shell of choice, in companies there are tons of scripts that launch programs, processes and so on, that will generally be coded in bash. Scripts that process files, take the output, send emails… All in a single script. The shell of remote nodes won’t be zsh or fish, it will be bash, and a lot of them won’t even have vim installed, only vi. Like it or not, bash is heavily used in a looot of places.

        • Caveman@lemmy.world
          link
          fedilink
          arrow-up
          1
          ·
          1 month ago

          Bash combines quick, dirty and fast in exchange for readable. Bash is also nice for terminal functions like opening a set of programs and whatever

      • poopsmith@lemmy.ml
        link
        fedilink
        English
        arrow-up
        0
        arrow-down
        1
        ·
        1 month ago

        I don’t see a lot of people building web servers in Bash. I think part of the point is that Python is a scripting language that likes to cosplay as a GPL.

  • purplemonkeymad@programming.dev
    link
    fedilink
    arrow-up
    15
    ·
    1 month ago

    It’s less of a main, and more of a “don’t do this if being imported.” You can just throw code without that block and it will run.

  • VibeCoder [they/them]@hexbear.net
    link
    fedilink
    English
    arrow-up
    10
    arrow-down
    1
    ·
    1 month ago
    #!/usr/bin/env python
    
    def main() -> None:
        """executes when file is run as a standalone script"""
        print('hello world')
    
    if __name__ == '__main__':
        main()
    

    geordi-no

    print('hello world')
    

    geordi-yes

  • Doxin@pawb.social
    link
    fedilink
    arrow-up
    6
    ·
    1 month ago

    I mean yeah with no context that looks weird A/F, but given a couple details it’s fairly self-evident why it be like it do.

    1. Python doesn’t need a main function. It’ll just start running any top level code. This is nice for beginners learning programming because there’s no scaffolding or anything to set up. It just do the thing.
    2. python uses double underscores (usually called “dunder”) to mark “special” things. __name__ is a global variable containing the name of the current module. There’s a couple more like __file__ containing the filename of the current module.
    3. If you run a file directly __name__ gets set to "__main__". If it got set to something more sensible like "main" you couldn’t really call a file main.py without this breaking. Right now this only breaks for files called __main__.py but luck would have it that calling a file __main__.py already has a special meaning which makes these uses not clash.
    4. Sometimes you want code to only run if a module is run but not when it is imported. Checking if __name__ is set to __main__ is the easiest way to do this.

    Python for sure has a bunch of weirdness, but it all does mesh together into a rather nice programming language.

  • ITeeTechMonkey@lemmy.world
    link
    fedilink
    English
    arrow-up
    6
    ·
    1 month ago

    If it’s a quick dirty script like doing a one time update to multiple records then I’ll just write it under the if name == main.

  • PowerCrazy@lemmy.ml
    link
    fedilink
    English
    arrow-up
    5
    ·
    1 month ago

    Idk, I guess I should ask why python needs a default function? If I’m running it as a script with commandline invocation I just copy and paste the if main namespace thing from stack overflow and it works as I intended. It also works if I invoke via python my_script.py $args, so I don’t really see why I should philosophically care about how other languages that I’m not using do it.

      • PowerCrazy@lemmy.ml
        link
        fedilink
        English
        arrow-up
        1
        ·
        1 month ago

        I can import my_script2.py into my_script.py it doesn’t run the main method unless I specifically invoke my_script2.main() though.

  • Caveman@lemmy.world
    link
    fedilink
    arrow-up
    3
    ·
    1 month ago

    It’s a common practice but not required. Python behaves like JS where it just runs whatever you wrote. If you don’t want it to run when importing the file you can put the main() inside the if so it only runs when you run the actual file.

    You can use it when developing a function or a class to run a simple test without running the whole program.

    • itslilith@lemmy.blahaj.zone
      link
      fedilink
      arrow-up
      6
      ·
      1 month ago

      that is so cursed

      And I say that as someone who learnt python as her first language (to be proficient in):

      holy shit is this language stupid

      • Fushuan [he/him]@lemm.ee
        link
        fedilink
        arrow-up
        5
        ·
        edit-2
        1 month ago

        I’m gonna repeat what I wrote in another comment. You are comparing the default interpreted way of running pythong to a compiled language. When you compile a python program into a wheel, you define the entry points of the code on it, and they point to functions like main() or whatever you define.

        You aren’t complaining that a index.js doesn’t automatically run the main function when run by node, or that bash doesn’t also have a default main function execution. Interpreted languages oriented to scripting won’t have the same rules as compiled languages.

        programming languages aren’t usually cursed, what’s cursed is the way some people decide to structure their programs. I’ve seen some stuff.

        • itslilith@lemmy.blahaj.zone
          link
          fedilink
          arrow-up
          2
          ·
          1 month ago

          Some programming languages are indeed cursed (e.g. JavaScript). But for the most part I agree, it’s what people do with it. But what’s cursed with python is what idioms have become common place.