Chris Angelico wrote: > On Fri, May 29, 2020 at 5:25 AM Alex Hall alex.moj...@gmail.com wrote: > > > > On Thu, May 28, 2020 at 12:57 PM Paul Sokolovsky pmis...@gmail.com wrote: > > > > > And in all fairness, all good ideas already came > > to somebody else years > > ago. There's https://www.python.org/dev/peps/pep-0299/ > > , successfully > > rejected yet back in 2002. (So, feel free to use it in your own > > environment/Python dialect.) > > Thanks for the link. Pity it was rejected. I can think of one reason I'd > > quite > > like this beyond it being DRY and concise: I often see code written by > > others like > > this: > > def foo(bar): > > print(bar) > > > > if __name__ == '__main__': > > bar = 3 > > foo(bar) > > > > Now bar is both a local and global variable, which leads to both annoying > > IDE warnings and actual bugs. I think I encountered a bug related to this > > when someone > > used eval() (which was the right thing to do in this case) and didn't > > specify > > the namespaces correctly, but name shadowing made it seem like their code > > was > > correct. > > Point is, I'd like something that encourages people to put all their > > __main__ logic and variables into a function, rather than a module level > > conditional. > > People can already put all their main logic into a function. If you > want to unit-test your main function, that's the best way to do it. > The trouble is, how much goes into main() and how much into if > __name__ == '__main__'? For example: Does your main function accept a > list of arguments, or does it look in sys.argv? Neither answer is > wrong. And that means the best way is to NOT force everyone across all > of Python to choose the same way - let people write their code their > way. > ChrisA
It is not enforcing user it just to provide more choice: ```python if __name__ == '__main__': ... main logic ... ``` or this way: ```python def __main__(); sys.argv[0] ... main logic ... ``` `__main__` will be called only once at the end of script if it was called as script Also on additional benefit, it will help people that came from other languages: ```rust fn main() { ... } ``` or ```c void main() { ... } ``` or ```java class MyClass { public void main(...) { ... } } ``` and in Python it could look like this: ```python def __main__(); ... main logic ... ``` _______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/DFDNB74ZQZPZ5MJDUHAJ6C23FA7VQUOR/ Code of Conduct: http://python.org/psf/codeofconduct/