同步文件之间的变量更改 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
模块上的引用。
我想在文件之间共享一个变量。
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
模块上的引用。