Tag: idioms

if __name__ ==“__main__”:做什么?

什么是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解释器正在将该模块(源文件)作为主程序运行,它会将特殊__name__变量设置为一个值"__main__"。如果此文件正从另一个模块导入,__name__则将设置为该模块的名称。 在你的脚本的情况下,让我们假设它正在执行作为主要功能,例如你说了类似的东西 python threading_example.py 在命令行上。设置特殊变量后,它将执行import语句并加载这些模块。然后它将评估该def块,创建一个函数对象并创建一个名为myfunction该函数对象的变量。然后它会读取if语句并看到__name__相等"__main__",所以它会执行那里显示的块。 这样做的一个原因是,有时你会写一个模块(一个.py文件),它可以直接执行。或者,它也可以导入并用于其他模块。通过执行主要检查,您可以让代码仅在您希望将模块作为程序运行时执行,并且在有人只需要导入模块并自行调用您的函数时不会执行。 看到这个页面的一些额外的细节。   通过将脚本作为命令传递给Python解释器来运行脚本时, python myscript.py 所有处于缩进级别0的代码都会被执行。定义的函数和类已经定义好了,但是没有任何代码可以运行。与其他语言不同,没有main()自动运行的main()功能- 该功能隐含在顶层的所有代码。