输入()的eval()行为

时间:2018-03-30 10:05:25

标签: python eval

我有一个初学者的问题。

>>> eval("1 + 2 * 3")
7

有道理。 但为什么会这样呢

>>> eval(input())
"1 + 2 * 3"
'1 + 2 * 3'

我确实看到手动插入的字符串与shell中函数的字符串没有区别?为什么或如何以不同的方式评估它?我在此发现的以前关于eval的问题并没有真正解决我的问题。我想了解幕后发生的事情......

2 个答案:

答案 0 :(得分:4)

当你调用input()时,它会将整个输入行作为字符串返回,它不像程序代码那样解析它。所以引号按字面意思包含在内。

因此,当您在输入回复中输入引号时,它等同于:

eval('"1 + 2 * 3"')

当您手动调用eval()时需要引号,因为引号是文字字符串语法的一部分。但它们实际上并不是字符串的一部分。

答案 1 :(得分:0)

尝试使用此

<强>的eval(输入(R&#34;&#34))

>>> eval(input(r""))
1 + 2 * 3

O/P: 7