【问题标题】:How to eval a string containing an equal symbol?如何评估包含等号的字符串?
【发布时间】: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


    【解决方案1】:

    可以这样做:

    exec('%s = %s' % el)
    

    但不要。真的,不要。你不需要动态局部变量,你需要一个字典:

    my_dict = dict(list1)
    

    【讨论】:

    • eval 仅适用于表达式。那将需要exec。不过,他不应该那样做:P
    • 最好使用字典。这样,您可以将键和值放在一个变量中,如果需要,您还可以使用 keys() 和 values() 分别访问它们。
    【解决方案2】:

    你不需要eval

    您可以通过调用vars 内置函数直接访问本地环境。这是一个交互式会话示例:

    >>> list1 = [("a", 4), ("b", 8)]
    >>> vars().update(dict(list1))
    >>> a
    4
    >>> b
    8
    

    这里vars() 返回带有局部变量绑定的字典。由于它返回一个指向唯一实例的指针(不是副本),因此您可以就地修改它 (.update)。

    【讨论】:

    • 虽然这是真的,并且确实回答了他的问题,但你真的不应该那样做。最好为他们创建一个新字典。
    • 根据vars() documentation:“没有参数,vars() 的行为就像locals()。注意,本地字典只对读取有用,因为本地字典的更新被忽略了。”
    猜你喜欢
    • 1970-01-01
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-24
    • 1970-01-01
    相关资源
    最近更新 更多