同步文件之间的变量更改 python

Sync change of variables between files python

我想在文件之间共享一个变量。

B.py

b_var = 'start'

def change_var():
    global b_var
    b_var = 'changed'

test.py

from proj.B import change_var, b_var

print(b_var)
change_var()
print(b_var)

输出为:

start
start

我怎样才能得到输出:

start
changed

类似于python docs

的解决方案

B.py

b_var = 'start'

mod.py

import B

def change_var():
    B.b_var = 'changed'

test.py

import B
import mod
print(B.b_var)
mod.change_var()
print(B.b_var)

产出

start
changed

简短的回答是,一旦你使用一个简单的变量,你就输了。因为当你使用(任何值都可以):

var = value

您不要尝试更改 var 先前引用的对象,而只是让 var 指向另一个对象。所以指向原始对象的任何其他变量都不会受到影响。

因此您将不得不在可变对象(此处为模块)或容器的元素上使用属性。这样,对象本身就会发生变化,指向该对象的所有变量都会反映出变化。当然,如果在你的程序的任何一点你有一个指向属性的简单变量,这个变量将不会反映变化。

这样就可以了:

from proj.B import change_var   # change_var will not change: we directly import it
import B

print(B.b_var)      # but we use b_var (expected to change) through another object
change_var()
print(B.b_var)

因为b_var不是变量,是对不可变字符串的引用。

导入语句正在复制引用,当 change_var() 运行时它会创建一个新字符串并仅更改 B 模块而不是 test 模块上的引用。