转自:https://stackoverflow.com/questions/419163/what-does-if-name-main-do
When your script is run by passing it as a command to the Python interpreter,
python myscript.pyall of the code that is at indentation level 0 gets executed. Functions and classes that are defined are, well, defined, but none of their code gets run. Unlike other languages, there's no main() function that gets run automatically - the main() function is implicitly all the code at the top level.
In this case, the top-level code is an if block. __name__ is a built-in variable which evaluates to the name of the current module. However, if a module is being run directly (as in myscript.py above), then __name__ instead is set to the string "__main__". Thus, you can test whether your script is being run directly or being imported by something else by testing
if __name__ == "__main__":
...If your script is being imported into another module, its various function and class definitions will be imported and its top-level code will be executed, but the code in the then-body of the if clause above won't get run as the condition is not met. As a basic example, consider the following two scripts:
# file one.py
def func():
print("func() in one.py")
print("top-level in one.py")
if __name__ == "__main__":
print("one.py is being run directly")
else:
print("one.py is being imported into another module")# file two.py
import one
print("top-level in two.py")
one.func()
if __name__ == "__main__":
print("two.py is being run directly")
else:
print("two.py is being imported into another module")Now, if you invoke the interpreter as
python one.pyThe output will be
top-level in one.py
one.py is being run directlyIf you run two.py instead:
python two.pyYou get
top-level in one.py
one.py is being imported into another module
top-level in two.py
func() in one.py
two.py is being run directlyThus, when module one gets loaded, its __name__ equals "one" instead of "__main__".
本文解释了Python中__name__变量的作用及如何使用__name__ == '__main__'来判断模块是否直接运行。通过示例展示了当作为主程序运行与被导入时的不同执行情况。

被折叠的 条评论
为什么被折叠?



