【发布时间】:2010-01-22 10:30:54
【问题描述】:
我有一个列表,list = ['foo','bar'],现在我想从每个项目创建一个字符串。
每个字符串都被命名为item并具有item的值
foo = 'foo' 酒吧 = '酒吧'
谢谢大家,我会改用字典
【问题讨论】:
-
不要使用
list作为变量名,它会影响内置 -
有什么意义?你想解决什么更高层次的抽象?
标签: python
我有一个列表,list = ['foo','bar'],现在我想从每个项目创建一个字符串。
每个字符串都被命名为item并具有item的值
foo = 'foo' 酒吧 = '酒吧'
谢谢大家,我会改用字典
【问题讨论】:
list作为变量名,它会影响内置
标签: python
不要那样做。请改用字典。
strings = dict((x, x) for x in L)
【讨论】:
Ignacio Vazquez-Abrams 是对的,使用字典更好。但如果你坚持让它们作为变量使用,你总是可以这样做:
strings = dict((x, x) for x in L)
locals().update(strings)
PS:Edan Maor 与exec 的版本存在安全问题。它不会处理["foo", "';__import__('os').system('rm -rf ~');'"],例如:)
【讨论】:
试试:
>>> l = ["foo", "bar"]
>>> for item in l:
exec("%s = '%s'" % (item, item))
注意:为什么需要这个?你确定这是做你想做的最好的方法吗?我问是因为这通常不是一个好主意。
安全警告:正如 Attila Oláh 所指出的,使用“exec”运行任意代码是一个非常糟糕的主意。仅当您控制列表中的字符串时才使用此选项(例如,它们不是来自用户的输入)。
【讨论】:
尽管有它们的名字,Python 中的变量实际上不应该是变量。如果您有要与“名称”相关联的数据,则应该使用 dict:
data = {}
for s in ['foo', 'bar']:
data[s] = s
有时(!)可以修改 locals() 以引入新变量,但是由于您没有明智的方式来引用它们(因为您在编写代码时不知道它们的名字),所以真的没有其中的价值。它所做的只是让你的代码很多变慢并且更难理解。
【讨论】:
看看http://docs.python.org/library/functions.html#setattr
你应该可以做一些事情
for x in list:
setattr(object, x, x)
假设 object 是您想要添加属性的任何对象。
【讨论】: