Python 在函数中使用vars()[]不起作用

Python 在函数中使用vars()[]不起作用,python,function,dictionary,variables,Python,Function,Dictionary,Variables,我通过一个列表和一个类生成变量。一切都很好。在函数外部,我可以调用其中一个变量保持的数据,但在函数内部,我可以直接调用数据,但不能使用vars()[]方法 我曾尝试在谷歌和这个网站上搜索直接答案,但一直找不到解决方案 我可以做些什么来制作: print(str(k)+:“+str(vars()[k].data)) 内部工作 类发光二极管: 定义初始化(自我,gpio): self.gpio=gpio self.data=[] self.state=False LED_列表={'G1':8} 对

我通过一个列表和一个类生成变量。一切都很好。在函数外部,我可以调用其中一个变量保持的数据,但在函数内部,我可以直接调用数据,但不能使用vars()[]方法

我曾尝试在谷歌和这个网站上搜索直接答案,但一直找不到解决方案

我可以做些什么来制作:

print(str(k)+:“+str(vars()[k].data))
内部工作

类发光二极管:
定义初始化(自我,gpio):
self.gpio=gpio
self.data=[]
self.state=False
LED_列表={'G1':8}
对于LED_列表中的k,v.items():
vars()[k]=发光二极管(v)
G1.data=[10,15,20,25]
打印(“外部”)
对于LED_列表中的k,v.items():
打印(str(k)+:“+str(vars()[k].data))
def runner():
打印(“内部”)
对于LED_列表中的k,v.items():
印刷品(k,v)
打印(“G1数据:”+str(G1数据))
打印(str(k)+:“+str(vars()[k].data))
跑步者()
这是我的输出:

外部
G1:[10,15,20,25]
在…内
G18
G1数据:[10,15,20,25]
回溯(最近一次呼叫最后一次):
文件“/…/Main2.py”,第23行,在
跑步者()
文件“/…/Main2.py”,第21行,在runner中
打印(str(k)+:“+str(vars()[k].data))
键错误:“G1”
globals()
代替
vars()
——但是请阅读下面的说明,因为使用
vars()
globals()
并不是解决问题的正确方法


班级领导:
定义初始化(自我,gpio):
self.gpio=gpio
self.data=[]
self.state=False
LED_列表={'G1':8}
对于LED_列表中的k,v.items():
vars()[k]=发光二极管(v)
G1.data=[10,15,20,25]
打印(“外部”)
对于LED_列表中的k,v.items():
打印(str(k)+:“+str(vars()[k].data))
def runner():
打印(“内部”)
对于LED_列表中的k,v.items():
印刷品(k,v)
打印(“G1数据:”+str(G1数据))
打印(str(k)+:“+str(globals()[k].data))
跑步者()

它正在工作。在函数内部,
vars()
相当于
locals()
,(注意,
locals()
返回的dict修改不会反映在实际的本地名称空间中)您首先尝试做的是非常不可取的,不要使用动态变量,只需使用容器,如
dict
,如果你想使用动态变量,这基本上就是你必须要做的。@juanpa.arrivillaga谢谢你的回复。我确实遇到了当地人的部分。但我不是一个特别好的程序员,所以我不知道你的确切意思。我也不了解带容器的零件(sry)。我只是不明白为什么我不能在函数中执行与外部相同的调用。@Hudlommen2这就是为什么你不应该尝试这样做。有关更好的替代方案的讨论,请参阅。@glibdud Ok。但作为最后一件事?使用dict作为容器是否更快?为什么这是一个更好的解决方案?@Hudlommen2它使您不必使用
vars()
等工具来进行这种黑客行为。它使您的代码更简单、更可读、更易于维护。