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