我使用字典在函数中引用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]引用全局变量而不是局部变量,同时仍然通过字典引用该变量?
感谢您的宝贵时间,如果我遗漏了一些显而易见的东西,我深表歉意。
发布于 2020-01-28 00:20:22
当您为名称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发布于 2020-01-28 00:07:47
如果您认为您需要这样做,那么您的代码中存在设计缺陷。我真的不推荐这样做。
global_a = 5
def add_to_global(key, value):
globals()[key] += value
add_to_global("global_a", 2)
print(global_a)输出:
7https://stackoverflow.com/questions/59934705
复制相似问题