3 回答
TA贡献1841条经验 获得超3个赞
您可以使用exec:
with open('mydog.txt') as f:
list_names = [line.strip() for line in f]
for name in list_names:
exec('{} = ["test"]'.format(name))
local = locals()
for name in list_names:
print ('list_name:', name, ', value:', local[name])
或者
print (bingo, bango, smelly, wongo)
输出:
list_name: bingo , value: ['test']
list_name: bango , value: ['test']
list_name: smelly , value: ['test']
list_name: wongo , value: ['test']
or
['test'] ['test'] ['test'] ['test']
TA贡献1829条经验 获得超7个赞
您正在向函数的本地命名空间添加变量。您添加的任何内容都不会在函数之外可见。
您所做的赋值是给一个名为 by 的变量nameoflist,而不是它所指的字符串。
为了解决这个问题,你必须分配给模块命名空间。这其实并不难:
def createlist(nameoflist):
globals()[nameoflist] = ["test"]
你必须问自己的问题是你为什么要这样做。假设您加载文件:
with open("mydog.txt") as f:
for line in f:
createlist(line.strip())
现在你确实可以做到
>>> print(bingo)
['test']
但是,使用文件的全部意义在于具有动态名称。你不知道你会得到什么名字,一旦你把它们放到全局命名空间中,你就不会知道哪些变量来自文件,哪些来自其他地方。
请记住,全局命名空间只是一个花哨但常规的字典。我的建议是将变量保存在你自己的字典中,只是为了这个目的:
with open("mydog.txt") as f:
mylists = {line.strip(): ['test'] for line in f}
现在您可以按名称访问项目:
>>> mylists['bingo']
['test']
但更重要的是,您可以检查获得的名称并以有意义的方式实际操作它们:
>>> list(mylists.keys())
['bingo', 'bango', 'smelly', 'wongo']
添加回答
举报