Friday Finking: Source code organisation
Cameron Simpson
cs at cskk.id.au
Thu Jan 2 02:46:37 EST 2020
On 02Jan2020 18:01, DL Neil <PythonList at DancesWithMice.info> wrote:
>On 29/12/19 5:49 PM, Cameron Simpson wrote:
>>For main, i have the opposite habit. If a module has a main() function
>>for command line use I usually want that right up the front:
>>
>> #!/usr/bin/env python3
>> ....
>> import...
>>
>> def main(argv=None):
>> ... main command line ...
>>
>> classes, functions, etc
>>
>> if __name__ == '__main__':
>> sys.exit(main(sys.argv))
>>
>>My reasoning here is that I want the main programme obvious up front.
>>
>>But then I loosely follow "define before use" after that.
>
>OK, I'll bite:
>
>1 the reader (one assumes) starts at the top, then scrolls all the way
>to the bottom to find if...__main___, but is then directed to search
>for the def main... which is all the way back up to the top!
If they scrolled, they'd have seen the main() function. I consider it
akin to the opening comment/docstring: I want the reader to know pretty
immediately that this has a meaningful command line mode.
>2 if instead of a main(), that code was under if ... __main__ would
>that be an equally reasonable and "obvious" place to find it?
Well...
Inline code under the if...__main__ stuff cannot be called as a
function; I usually consider the main() function a reusable component.
The boilerplate under if...__main__ at the bottom is just the call to it
for when the module is used with "python -m". But main itself is
standalone. So it won't be under the if...__main__; the only real
discussion is where to put it.
Cheers,
Cameron Simpson <cs at cskk.id.au>
More information about the Python-list
mailing list