【发布时间】:2012-01-11 11:17:55
【问题描述】:
eval 函数有一些问题。我有一个列表,例如,
list1 = [('a',1), ('b',2), ('c',3)]
我想将元组的每个值分配给第一个元素:
for el in list1 :
eval(el[0]) = el[1]
我该怎么做?
【问题讨论】:
标签: python string eval equals-operator
eval 函数有一些问题。我有一个列表,例如,
list1 = [('a',1), ('b',2), ('c',3)]
我想将元组的每个值分配给第一个元素:
for el in list1 :
eval(el[0]) = el[1]
我该怎么做?
【问题讨论】:
标签: python string eval equals-operator
你可以这样做:
exec('%s = %s' % el)
但不要。真的,不要。你不需要动态局部变量,你需要一个字典:
my_dict = dict(list1)
【讨论】:
eval 仅适用于表达式。那将需要exec。不过,他不应该那样做:P
你不需要eval。
您可以通过调用vars 内置函数直接访问本地环境。这是一个交互式会话示例:
>>> list1 = [("a", 4), ("b", 8)]
>>> vars().update(dict(list1))
>>> a
4
>>> b
8
这里vars() 返回带有局部变量绑定的字典。由于它返回一个指向唯一实例的指针(不是副本),因此您可以就地修改它 (.update)。
【讨论】:
vars() documentation:“没有参数,vars() 的行为就像locals()。注意,本地字典只对读取有用,因为本地字典的更新被忽略了。”