What does if __name__ == “__main__”: do?

微信公众号:stackflow
若有问题或建议,请公众号留言
Question:https://stackoverflow.com/questions/419163/
最近更新:2018-12-29html

需求分析

如题:
代码以下:python

 1# Threading example
2import time
3import thread
4
5def myfunction(string, sleeptime, lock, *args):
6    while True:
7        lock.acquire()
8        time.sleep(sleeptime)
9        lock.release()
10        time.sleep(sleeptime)
11
12if __name__ == "__main__":
13    lock = thread.allocate_lock()
14    thread.start_new_thread(myfunction, ("Thread #: 1"2, lock))
15    thread.start_new_thread(myfunction, ("Thread #: 2"2, lock))
复制代码

Answers

当python解释器运行源代码时, 它将执行全部能找到的代码。
在代码执行前,解释器会定义几个特定的变量。例如,若是解释器将该模块 (源文件) 做为主程序运行, 会设置__name__ == '__main__'。若是此文件是从另外一个模块导入的, 则__name__将设置为模块的名称。
示例中的代码,假设是做为主函数来运行,即微信

1python threading_example.py
复制代码

设置特殊变量后, 它将执行导入语句并加载这些模块。而后, 它将计算def块, 建立一个函数对象, 并建立一个名为 myfunction 的变量, 指向该函数对象。而后, 它将读取 if 语句, 并看到 __name__ 确实等于 "__main__", 所以它将执行显示在其中的代码块。
这样作的一个缘由是, 有时编写一个模块 (a.py), 能够直接执行。或者, 也能够在另外一个模块中导入和使用它。经过执行主程序检查, 你但愿只将模块做为程序运行时执行该代码, 而不是在有人只想要导入你的模块并调用函数时执行该代码。
More 有更多解释app

注: 若是将代码放在函数定义以前, 它将在 __name__以前执行。函数

 1print("This code executes before main."
2
3def functionA():
4    print("Function A")
5
6def functionB():
7    print("Function B")
8
9if __name__ == '__main__':
10    functionA()
11    functionB()
复制代码

做为主函数执行的输出以下:ui

1This code executes before main. 
2Function A 
3Function B
复制代码

若是导入此模块而不是用做主函数, 则在导入时将输出如下内容:spa

1This code executes before main. 
复制代码
相关文章
相关标签/搜索