'if __name__ == "__main__":'有什么作用?

0 / 8
rank vote view answer url
2 7707 4,203,855 42 url

if __name__ == "__main__": 有什么作用?

# Threading example
import time, thread

def myfunction(string, sleeptime, lock, *args):
    while True:
        lock.acquire()
        time.sleep(sleeptime)
        lock.release()
        time.sleep(sleeptime)

if __name__ == "__main__":
    lock = thread.allocate_lock()
    thread.start_new_thread(myfunction, ("Thread #: 1", 2, lock))
    thread.start_new_thread(myfunction, ("Thread #: 2", 2, lock))

当 Python 解析器读取一个源文件时,会执行里面所有的代码。

但是在它执行之前会定义一些特殊的变量。例如,如果 Python 解析器把一个 module(the source file)当成主程序来执行的话,它会把 __name__ 的值设置成为 __main__。如果这个文件是被其他 module 引入的,__name__ 的名字将会被设成 module 的名字。

在你给的例子中,我们假设作为一个主程序来执行,例如在 shell 里执行如下命令:

python threading_example.py

当设置好特殊变量后,它会执行 import 声明并且开始载入这些 modules。它会执行 def 代码块,创建一个函数对象并且会创建一个 myfunction 的变量指向这个函数对象。接下来它会读取 if 语句并且判断 __name__ 是否等于 __main__,如果等于就执行代码块里面的程序。

你想创建一个 module (一个 .py 文件),同时也想能够被其他 module 引用。填入 if __name__ == "__main__": 能使你在以这个 module 作为主程序时才会执行,而其他外部引用不会执行这些代码。