【问题标题】:what is the meaning of eval() in x=eval(input("hello"))? [duplicate]x=eval(input("hello")) 中的 eval() 是什么意思? [复制]
【发布时间】:2014-03-08 09:25:39
【问题描述】:

x=eval(input("hello")) 是什么意思,难道不是用 eval() 代替 int 之类的东西吗?我认为 x 是一个变量,属于某个确定其类型的类,eval 是否包括所有已知的类,如 int float complex...?

【问题讨论】:

  • eval,就像文档说的那样,评估参数,就像它是 python 代码一样。它可以是任何有效的 Python 表达式。它可以是一个函数。
  • 搜索 protip: "python eval" - 第一个命中是 docs.python.org/2/library/functions.html#eval,它说“表达式参数被解析并评估为 Python 表达式..”
  • (另外,你要么该死的幸运,要么选择了一个有趣的句柄..)

标签: python eval


【解决方案1】:

eval,就像文档说的那样,评估参数,就像它是 python 代码一样。它可以是任何有效的 Python 表达式。它可以是一个函数、一个类、一个值、一个循环、恶意的东西……

经验法则:除非没有其他选择,否则不要使用它。如果没有其他选择,无论如何都不要使用它。

【讨论】:

  • 经验法则+1 :-)
【解决方案2】:

eval() 将解释用户在input() 期间键入的内容。因此,如果用户在本地输入 x+1 且 x 等于 1,它将输出 2(见下文)。
文档摘录:

使用 globals 和 locals 字典作为全局和本地命名空间,将表达式参数解析和评估为 Python 表达式(从技术上讲,条件列表)。

>>> x = 1
>>> print eval('x+1')
2

这可能很危险,因为用户可以输入任何他想要的内容,比如...一些 Unix 命令。 不要使用它,除非你知道自己在做什么(即便如此,它也会导致严重的安全漏洞)。

【讨论】:

  • eval() 计算表达式。 eval("a = 1") 是一个错误,因为赋值不是表达式。
猜你喜欢
  • 2020-04-26
  • 2021-07-21
  • 2019-06-15
  • 2017-02-01
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-17
相关资源
最近更新 更多