【问题标题】:How can I assign the value of a variable using eval in python?如何在 python 中使用 eval 分配变量的值?
【发布时间】:2011-04-08 18:26:13
【问题描述】:

好的。所以我的问题很简单:如何在 Python 中使用 eval 分配变量的值?我试过eval('x = 1') 但这不起作用。它返回一个语法错误。为什么这不起作用?

【问题讨论】:

  • 你想做什么?无论你在做什么,都不应该使用 eval。
  • 不同意,eval 有很多用途

标签: python


【解决方案1】:

因为x=1 是一个语句,而不是一个表达式。使用exec 运行语句。

>>> exec('x=1')
>>> x
1

顺便说一句,如果您只需要一个动态名称来分配,那么有很多方法可以避免使用exec/eval,例如你可以使用字典,setattr functionlocals() dictionary

>>> locals()['y'] = 1
>>> y
1

更新:虽然上面的代码可以在 REPL 中运行,但它不能在函数中运行。如果exec 是不可能的,请参阅Modifying locals in Python 以获取一些替代方案。

【讨论】:

  • 顺便说一句,如果你想改变这样的变量,你可能需要一个字典。
  • 下次我做这样的事情时可能会使用字典。
  • Python 文档说你不应该修改locals()。 (docs.python.org/2/library/functions.html#locals) 有没有另一种方法可以使用赋值,而没有eval() 的全部邪恶?
【解决方案2】:

你不能,因为变量赋值是一个语句,而不是一个表达式,而eval 只能是eval 表达式。请改用exec

更好的是,不要使用其中任何一种,并告诉我们您真正想要做什么,以便我们能够提出一个安全而理智的解决方案。

【讨论】:

    【解决方案3】:
    x = 0 def assignNewValueToX(v): 全局 x x = v eval('assignNewValueToX(1)') 打印(x)

    它有效...因为 python 将实际运行 assignNewValueToX 来评估表达式。它可以进一步开发,但我相信有一个更好的选择可以满足几乎任何人的需求。

    【讨论】:

    • 差不多,但我需要动态分配变量名。不过还是谢谢。
    【解决方案4】:

    您实际上可以将exec() 命令放在eval()

    所以你的声明看起来像eval("exec('x = 1')")

    附言这很危险

    【讨论】:

      猜你喜欢
      • 2018-12-02
      • 1970-01-01
      • 2021-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多