我正在编写一个程序,从数据库中提取部门列表。我想避免对此进行硬编码,因为列表可能会发生变化。
我想为每个部门创建一个变量,将问题填充到 GUI 中。我遇到的问题是我可以使用 vars() 函数从数据库列表中创建变量。然后,我存储变量名称列表,以便可以在程序的其他地方引用它们。只要我在同一个 def 中完成所有操作,就没有问题。但我不知道如何在单独的函数中引用动态创建的变量。
由于我不会提前知道变量名称,因此我不知道如何使它们在其他函数中可用。
deptList = ['deptartment 1', 'deptartment 2', 'deptartment 3', 'deptartment 4', 'deptartment4']
varList=[]
def createVariables():
global varList
for i in range(len(deptList)):
templst=deptList[i].replace(' ', '')
varList.append(templst+'Questions')
globals()['{}'.format(varList[i])] = []
def addInfo():
global varList
print('varlist',vars()[varList[1]]) #Keyerror
createVariables()
print(varList)
vars()[varList[1]].append('This is the new question')
print('varlist',vars()[varList[1]]) #Prints successfully
addInfo()
Do not此处使用动态变量。这没有任何意义,只需使用 Python 的内置容器之一,例如dict
.
但是,您的代码不起作用的原因是vars()
回报locals()
当不带参数调用时。来自docs https://docs.python.org/3/library/functions.html#vars:
vars([对象]) 返回__dict__
模块、类的属性,
实例,或任何其他具有__dict__
属性。
...
无需争论,vars()
行为就像locals()
。注意,当地人
字典仅对读取有用,因为更新了本地变量
字典被忽略。
所以说真的,你只想使用dict
返回的对象globals()
。但这应该会让您想知道,为什么不直接将全局名称空间排除在外,而只使用您自己的自定义名称空间dict
目的?读this https://stackoverflow.com/questions/1373164/how-do-i-create-a-variable-number-of-variables相关问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)