码迷,mamicode.com
首页 > 编程语言 > 详细

python if __name__ == '__main__' 作用

时间:2018-01-23 14:27:57      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:col   eve   exec   port   init   test   bsp   作用   automatic   

转载: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.py

 

all 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.pyabove), 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.py

 

The output will be

top-level in one.py
one.py is being run directly

 

If you run two.py instead:

python two.py

 

You 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 directly

 

Thus, when module one gets loaded, its __name__ equals "one" instead of __main__.

python if __name__ == '__main__' 作用

标签:col   eve   exec   port   init   test   bsp   作用   automatic   

原文地址:https://www.cnblogs.com/huahuayu/p/8335132.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!