# Assume that this is another_module.py import my_module
然后字符串'my_module'将被分配给__name__.
主要方法是如何工作的?
现在假设我们有以下模块,其中包含以下代码行:
# first_module.py print('Hello from first_module.py')
if __name__ == '__main__': print('Hello from main method of first_module.py')
所以在上面的模块中,我们有一个在 main 方法之外的打印语句和一个在内部的打印语句。main 方法下的代码只有在模块作为脚本从(例如)命令行调用时才会执行,如下所示:
python first_module.py Hello from first_module.py Hello from main method of first_module.py
现在,假设我们不想将模块first_module作为脚本调用,而是想将其导入另一个模块:
# second_module.py import first_module
print('Hello from second_module.py')
if __name__ == '__main__': print('Hello from main method of second_module.py')
最后,我们second_module作为脚本调用:
python second_module.py Hello from first_module.py Hello from second_module.py Hello from main method of second_module.py
请注意,第一个输出来自模块first_module,特别是来自 main 方法之外的打印语句。由于我们没有first_module作为脚本调用,而是将其导入到second_modulefirst_module 的 main 方法中,因为if name == ‘__main__'计算结果为False. 回想一下,从上面的调用中,__name__变量 forsecond_module被分配了字符串'main',而first_module's__name__变量被分配了模块的名称,即’first_module’。
尽管下面的所有内容都if name == ‘__main__'被认为是我们所说的“main 方法”,但最好定义一个适当的 main 方法,如果条件评估为 True 则调用该方法。例如,
# my_module.py def main(): """The main function of my Python Application""" print('Hello World')
在本文中,我描述了 main 方法如何在 Python 中执行以及在什么条件下执行。当一个模块作为一个字符串被调用时,Python 解释器会将这个字符串分配'main'给一个名为 call 的特殊变量,随后将执行__name__在该条件下定义的代码。if name == ‘__main__'另一方面,当一个模块被导入到另一个模块中时,Python 解释器会将带有该模块名称的字符串分配给特殊变量__name__。这意味着在这种情况下if name == ‘__main__'将评估为False这意味着只有在这种情况之外的代码才会在导入后执行。