rank vote view answer url
5 4348 1893044 29 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 作为主程序时才会执行, 而其他外部引用不会执行这些代码.

可以在 这里 查看更多细节