On 05Jul2018 11:22, Rhodri James <rho...@kynesim.co.uk> wrote:
On 05/07/18 09:43, Abdur-Rahmaan Janhangeer wrote:
just when to use main() in

if __name__ == '__main__' :
    main()

is far is it good in py?

or should file intended to be run just not include it?

It's a matter of taste. If your "file intended to be run" also contains things that might be useful as a module, use the "if __name__ == '__main__'" trick. Otherwise it can be more of a distraction than a help. I'm not a big fan of "main()" functions myself; creating a function which will be called exactly once seems rather wasteful.

I almost always make a main. For several of my modules there's a meaningful command line mode, and for most of the rest I make main run the self tests.

The main function has some advantages:

- I put it at the top of the module, before anything other functions: that way the "main" operation of the module, if there is one, is in your face them you open the file, easy to find. Also, it is _immediately_ apparent that this module has a "main programme" mode.

- You don't need to call it just once. Making a main() function, should it make sense, lets you call it _from other code_. Consider a wrapper which relies on the main function of this module for the core command line operation, or which runs this module's main as some kind of "subcommand" in a larger tool, such as most VCS commands, GraphicsMagick, etc - all have subcommandswhich are effectively standalone things in their own right.

I also advocate making the boilerplate like this:

 if __name__ == '__main__':
   sys.exit(main(sys.argv))

and make main() like this:

 def main(argv=None):
   if argv is None:
     argv = sys.argv
   ... code here ...
   return meaningful_exit_code

The "argv is None" shuffle is for PyPI packaging, where the standard script wrapper _doesn't_ pass in sys.argv, (no idea why, I should submit an enhancement proposal). Otherwise, there's argv, ready for reuse of the main() function from arbitrary code.

Cheers,
Cameron Simpson <c...@cskk.id.au>
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to