gpt4 book ai didi

python - 全局变量赋值问题

转载 作者:行者123 更新时间:2023-12-01 06:05:41 24 4
gpt4 key购买 nike

我在函数内分配全局变量名称时遇到问题。该函数如下所示:

def nodegen(slabel, dlabel, sx, xy, dx, dy, num):
for i in range(1, num + 1):
label = slabel + (i - 1)*dlabel
global vars()["n" + str(label)]
vars()["n" + str(label)] = Node(label, (sx + i*dx, sy + i*dy))
vars()["n" + str(label)].info()

实际上,函数做什么并不重要。重要的是它生成了许多对象。它们中的每一个都被分配了一个变量 n1, n2, ..., nnum (索引不一定具有这个序列,它取决于 dlabel 变量,但这并不重要)。我想让这些变量成为全局变量,这样我就可以在函数之外使用它们。问题出在代码的第 4 行,因为全局语句似乎不适用于 vars()[] 语句。关于如何解决这个问题有什么想法吗?我收到“无效语法”错误消息。

提前致谢。

最佳答案

您应该将 globals() 视为字典,如下所示:

def fun(name, value):
globals()[name] = value

执行此函数后,它将添加或更新名为 name 的全局变量,其值为 value,例如要添加值为 10 的变量“a1”,请调用 fun('a1', 10)

不带参数的

vars()locals() 的作用相同。请参阅http://docs.python.org/library/functions.html#vars

但是请注意,添加这样的全局变量可能是一个坏主意。您应该将其设为类的方法并更新类实例的状态。或者,您应该返回某些内容或更新传入的结构。像这样的代码的错误很难找到和诊断,因为修改变量的位置并不是立即明显的(就像观察 encapsulation 规则时的情况一样)。

关于python - 全局变量赋值问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8057472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com