python定义主块之前/之后的变量差

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python定义主块之前/之后的变量差相关的知识,希望对你有一定的参考价值。

在主块之前或之后定义变量时,python有什么区别?请参见以下代码示例中的变量“ lock”。

以下代码有效:

import multiprocessing
from multiprocessing import Lock

lock=Lock()

def single_process(num):
    lock.acquire()
    print(num)    
    lock.release()

if __name__ == "__main__":
    p1 = multiprocessing.Process(target=single_process, args=(123,)) 
    p2 = multiprocessing.Process(target=single_process, args=(456,)) 

    p1.start() 
    p2.start()

    p1.join()    
    p2.join()

但是以下代码不起作用,表示未定义锁定:

import multiprocessing
from multiprocessing import Lock

def single_process(num):
    lock.acquire()
    print(num)    
    lock.release()

if __name__ == "__main__":

    lock=Lock()

    p1 = multiprocessing.Process(target=single_process, args=(123,)) 
    p2 = multiprocessing.Process(target=single_process, args=(456,)) 

    p1.start() 
    p2.start()

    p1.join()    
    p2.join()
答案

在第一个代码段中,lock是在全局范围内定义的,就像在该行之后的任何代码块中都可以访问该对象一样。

main函数有其自己的范围。因此,在第二个代码段中,lockmain函数的范围内定义,因此,除非您将single_process明确传递给它们,否则其他函数将无法访问它们。

以上是关于python定义主块之前/之后的变量差的主要内容,如果未能解决你的问题,请参考以下文章

为啥打印在 python 窗口的主块之外执行 3 次?

Python--函数

Vscode在使用变量之前转义斜杠

八函数

如果 __name__ == '__main__' 之后未定义 Python 变量

Python学习(22):模块