224

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?

top 38 comments
sorted by: hot top controversial new old
[-] olafurp@lemmy.world 4 points 12 hours 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.

[-] purplemonkeymad@programming.dev 20 points 1 day 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.

[-] FauxLiving@lemmy.world 33 points 1 day ago* (last edited 1 day ago)
if __name__ == '__main__':
    exec(open(__file__, 'r').read())

[-] davel@lemmy.ml 43 points 1 day ago
[-] fox@hexbear.net 13 points 1 day 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.

[-] davel@lemmy.ml 10 points 1 day ago
$ python -c 'return "King"'
  File "<string>", line 1
SyntaxError: 'return' outside function
$
[-] fox@hexbear.net 6 points 1 day ago

Like I'm trusting a snake to be honest

[-] huf@hexbear.net 1 points 22 hours ago

i dont think boromir ever said that though, this is from that mess made by that B-horror director

[-] pastermil@sh.itjust.works 16 points 1 day ago

It makes more sense if you're used to shell scripts.

[-] ryannathans@aussie.zone 26 points 1 day 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@lemm.ee 10 points 1 day 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.

[-] poopsmith@lemmy.ml 1 points 10 hours 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.

[-] barubary@infosec.exchange 4 points 10 hours ago

Do you know the difference between a script and a program?

A script is what you give the actors; a program is what you give the audience.

[-] MyNameIsRichard@lemmy.ml 3 points 20 hours ago

Nobody expects bash to be remotely sane!

[-] chaospatterns@lemmy.world 8 points 1 day ago* (last edited 1 day 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.

[-] olafurp@lemmy.world 2 points 12 hours 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

[-] fushuan@lemm.ee 4 points 20 hours ago

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

[-] barubary@infosec.exchange 1 points 14 hours ago

I don't understand the complaint. What exactly is the issue?

[-] fushuan@lemm.ee 2 points 12 hours ago* (last edited 12 hours ago)

the main issue presented in the meme is that python is "weird" because it doesn't have a default launch entrypoint like rust (I think) and c/c++. Both are compiled languages and python is generally not. When python is used in a compiled manner (wheels) however, it also does have a way to specify entrypoints, so the meme is comparing specifically compiled languages with interpreted scripting languages.

However, python is not weird at all about not having a general entrypoint in the scripting interpreted form, because all the other interpreted scripting languages work like that! Examples include all shell script languages like bash, zsh or fish, and other languages like javascript or R are similar.

The one I responded to however stated that they don't care that bash is similar because bash is also "insane" or "not sane", but as previously stated in this comment, all scripting languages have a lack of a funcion based entrypoint for their scripts, so I wonder which language are they using for their fast scripting if even bash is "not sane" for them.

My underlying point that i was trying to make in my first comment on this chain is that complaining that tools that are used in different use-cases are not similar is a pretty uneducated take that clearly shows a lack of diverse experience in the field.

Note: In my first comment on this chain I was expanding upon the comment of the one I responded to, as you can see that they are making a similar point when specifying that python's example is a different thing than the ones on top.

[-] LorIps@lemmy.world 1 points 17 hours ago

Well yeah, but you can at least not suffer as much by using Fish

[-] fushuan@lemm.ee 2 points 12 hours 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.

[-] ryannathans@aussie.zone 1 points 2 hours ago

In many environments we can't even assume bash, but are stuck with just sh

[-] VibeCoder@hexbear.net 9 points 1 day 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

[-] PowerCrazy@lemmy.ml 7 points 1 day 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.

[-] AlecSadler@sh.itjust.works 6 points 1 day ago

Because if another consumer imports it you don't want it running the main method

[-] PowerCrazy@lemmy.ml 1 points 17 hours 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.

[-] ITeeTechMonkey@lemmy.world 9 points 1 day 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.

[-] brunogron@feddit.nu 17 points 1 day ago

If it's a one time script you don't even need the if...

[-] Trimatrix@lemmy.world 4 points 1 day ago

I always put all of the code in the main block. Only exception is when I am creating a multithreaded/multiprocessor application. Then I normally use the if statement as the place to setup “the plumbing” with pipes and what not. That way people are forced to realize there is no main function but two co functions working in tandem

[-] Pudutr0n@feddit.cl 6 points 1 day ago
[-] davel@lemmy.ml 3 points 1 day ago

There isn’t a default function. Module-level code is outside of any function^1.

[-] itsathursday@lemmy.world 4 points 1 day ago

Depends on the situation but since Py3 you now have main.py in Python Packages

[-] itslilith@lemmy.blahaj.zone 6 points 1 day 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@lemm.ee 11 points 1 day ago* (last edited 20 hours ago)

I'm gonna repeat what I wrote in another comment. You are comparing the default interpreted way of running python~~g~~ 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.

[-] hdnsmbt@lemmy.world 6 points 20 hours ago

pythong

Glad to see I'm not the only one who can't type python without Sigmund waving hello.

[-] fushuan@lemm.ee 1 points 20 hours ago

It's my fucking keyboard. I'm all in for open source and stuff but it's too much, I had to go back to proprietary ones because the other ones just suck for multi language inputs :(

[-] itslilith@lemmy.blahaj.zone 3 points 20 hours 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.

load more comments (-1 replies)
[-] Midnitte@beehaw.org 3 points 1 day ago

Now do for loops!

this post was submitted on 28 May 2025
224 points (96.7% liked)

Programmer Humor

35875 readers
1352 users here now

Post funny things about programming here! (Or just rant about your favourite programming language.)

Rules:

founded 5 years ago
MODERATORS