[英]Use a dictionary to refer to a global variable inside a function (Python)
我正在使用字典在函数内引用 Python 中的全局变量。 我想使用该函数来更新全局变量。 (实际上我的全局变量比这更复杂。)
global_variable_A=5
global_variable_B=1
dictionary={'A':global_variable_A,'B':global_variable_B}
def f(x,glob):
global global_variable_A
dictionary[glob]+=x
f(2,'A')
print(global_variable_A)
这返回 5 而不是 7。我明白为什么,无论如何让 Python 知道我的意思是变量dictionary[glob]
指的是全局变量而不是局部变量,同时仍然通过字典来指代变量?
感谢您的时间,如果我错过了一些完全明显的东西,我深表歉意。
如果您认为需要这样做,则说明您的代码存在设计缺陷。 我真的不建议这样做。
global_a = 5
def add_to_global(key, value):
globals()[key] += value
add_to_global("global_a", 2)
print(global_a)
输出:
7
当您为名称name = 5
分配值时,您正在创建对5
的引用,您可以使用标识符name
访问该引用。 通常,如果您有一些范围更窄的代码,您可以使用该引用
def f():
print(name)
或使用相同的标识符创建本地引用,可能指向不相关的值
def g():
name = 100
print(name)
global
关键字允许您像操作标识符一样操作标识符;不在更窄的范围内,允许您将全局名称重新分配给不同的引用:
def h():
global name
name = 100
h()
print(name) # 100
但是,当您使用一个引用创建另一个引用时,这两个引用之间没有任何关系。 所以
name = 5
l = [name]
给我们留下了两个对值5
引用:一个来自标识符name
,另一个来自l
的第一个位置。 至关重要的是,这两个参考文献并不相关。 我们可以改变一个而不改变另一个。
name = 6
print(l) # [5]
实现您想要的一种方法是使用盒装类型。 这意味着您创建了一个指向另一个对象的对象。 然后,您的所有引用都可以指向第一个对象(盒子),并且您可以自由地更改它指向的内容(盒子“内部”的东西),只需更新一个引用:
class Box:
def __init__(self, value):
self.value = value
box = Box(5)
l = [box]
box.value = 10
print(l[0].value) # 10
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.