On Nov 25, 2013, at 02:29 PM, Guido van Rossum wrote:
For all I care you can call it ismain().
IMHO the ismain() function is (at least so far) the best option -- because: * it separates the "is it the main module" check from its implementation details (__name__ == '__main__') so in a far future (Py 4.0?) it may become be possible to change those details (e.g. if they do not fit well with the import machinery logic); * beautiful is better than ugly (and -- IMHO -- the current idiom is too ugly + inconvenient to type, especially as a common boilerplate...); * after allowing to pass in an optional stack frame explicitly, it could make possible (or at least far easier) to test script ("run-as-the-main=module") behaviour, e.g.: def test_my_module_as_script(self): _orig_ismain = builtins.ismain def _mocked_ismain(module_frame=None): if module_frame is None: module_frame = sys._getframe(1) name = module_frame.f_globals['__name__'] if name == 'my_module': return True return _orig_ismain(module_frame) with unittest.mock.patch('bultins.ismain', _mocked_ismain): sys.modules.pop('my_module') import my_module <asserts...> * the feature could be easily backported to older Python versions == as a 3rd party module or just not so complex boilerplate code: # import_me_anywhere_before_using_the_ismain_function.py: import builtins, sys def ismain(module_frame=None): if module_frame is None: module_frame = sys._getframe(1) return module_frame.f_globals['__name__'] == '__main__' builtins.ismain = ismain Cheers. *j