在我正在阅读的Python书籍中,它一直使用代码eval(input('blah'))

我阅读了文档,我理解了它,但我仍然不明白它是如何改变input()函数的。

它能做什么?有人能解释一下吗?


当前回答

也许是一个阅读一行文字并解释它的误导性例子。

尝试eval(input())并输入“1+1”-这应该打印2。Eval求表达式的值。

其他回答

eval()函数接受三个参数,求值并返回值。 语法:eval(表达式,全局变量,局部变量) python3表达式的字符串 Globals(可选)#字典 Locals(可选)#字典 #你经常使用的常见用例是 x = "{“名称”:“abhi”,“mydict”:{“子”:python的}}” y=dict(x)print(y,type(y)) # ValueError:字典更新序列元素#0的长度为1;需要2 z = eval (x)打印(z,类型(z)) #{“名称”:“abhi”,“mydict”:{“子”:python的}}<类的dict >

Eval()将字符串解释为代码。这么多人警告您不要使用它的原因是因为用户可以使用它作为在计算机上运行代码的选项。如果你导入了eval(input())和os,人们可以在input() os中输入。system('rm -R *')将删除主目录下的所有文件。(假设您有unix系统)。使用eval()是一个安全漏洞。如果需要将字符串转换为其他格式,请尝试使用类似int()的方法。

eval()的一个有用的应用是计算python表达式的字符串值。例如load from file string dictionary:

running_params = {"Greeting":"Hello "}
fout = open("params.dat",'w')
fout.write(repr(running_params))
fout.close()

将其作为变量读取并编辑:

fin = open("params.dat",'r')
diction=eval(fin.read())
diction["Greeting"]+="world"
fin.close()
print diction

输出:

{'Greeting': 'Hello world'}

eval()将传递的字符串计算为Python表达式并返回结果。例如,eval("1 + 1")解释并执行表达式"1 + 1",并返回结果(2)。

您可能感到困惑的一个原因是,您引用的代码涉及到一定程度的间接。内部函数调用(input)首先执行,因此用户会看到“blah”提示。让我们想象一下,它们以“1 + 1”(为了清晰起见,添加引号,在运行程序时不要键入它们)响应,输入函数返回该字符串,然后将其传递给外部函数(eval),后者解释字符串并返回结果(2)。

在这里阅读更多关于eval的内容。

也许是一个阅读一行文字并解释它的误导性例子。

尝试eval(input())并输入“1+1”-这应该打印2。Eval求表达式的值。