5. 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解释器把源文件作为main程序运行时,它会将变量__name__设置为__main__,而如果这个文件被别的模块引入,__name__则会被设置为这个模块的名字。

在你的代码中,我们假设这份文件是被当作源文件运行的,也就是说你在命令行输入如下内容:

python threading_example.py

设置完一些变量以后,它会执行import语句加载一些模块,然后它会解析def语句,创造一个function对象和一个指向这个对象的变量myfunction。然后它会执行if语句判断__name__是否等于 __main__,这里等于,然后它就会执行剩下的代码段。

这么做的一个理由是,有时你写了一个直接可以被运行的py文件。然而,它也可以被其他模块import使用,我们做这样一个是否是main的判断,你可以让那些代码仅仅在文件作为main程序运行时运行,而在别人只是想引用你的模块使用你的其他函数时不运行那些代码。

geekcircle            updated 2018-05-27 22:49:43

results matching ""

    No results matching ""