【无标题】

 多线程全局变量使用注意事项

1 不改变原始data1使用 df = data1.copy() 不用global data1

def thread3():
    df = data1.copy()

2 要改变data1或data2

def thread3():
    global data1, data2

在Python中,当你在函数内部读取变量时,Python的解释器会首先在函数的局部作用域中查找该变量。如果在局部作用域中找不到,它会在全局作用域中查找。

在你的thread3函数中,你直接使用了data1和data2,并没有试图修改它们的值,因此Python解释器会直接从全局作用域中读取这两个变量。这就是为什么你可以在没有使用global关键字的情况下读取全局变量的值。

但是,如果你试图在函数内部修改全局变量的值,你就需要使用global关键字来告诉Python解释器你想要引用的是全局变量。否则,Python解释器会认为你是在创建一个新的局部变量。


是因为我使用了df = data1.copy() ?

对的。在你的thread3函数中,你使用了df = data1.copy(),这是在创建一个新的局部变量df,它是全局变量data1的一个副本。在这个过程中,你并没有试图修改data1的值。因此,你可以在没有使用global关键字的情况下读取全局变量data1的值。

如果你试图在函数内部修改全局变量的值,例如data1 = something,你就需要使用global关键字来告诉Python解释器你想要引用的是全局变量。否则,Python解释器会认为你是在创建一个新的局部变量。

这是Python的一个特点,它会根据变量有没有被重新赋值来判断一个变量是局部变量还是全局变量

换句话说,在Python中:

  • 如果要在函数内部修改全局变量,需要使用global关键字声明;

  • 如果只是读取全局变量的值,而不修改,可以直接使用,不需要global。

你可能感兴趣的:(python,java,开发语言)