我正在阅读的有关 Python 的书反复显示如下代码eval(input(‘blah’))。
这究竟如何修改调用的结果input?
eval()中的函数表示eval(input('blah'))程序正在从用户那里获取输入,然后将其作为 Python 表达式进行评估。下面是它的分步工作原理:
eval()
eval(input('blah'))
input('blah')
'blah'
这是一个简单的
user_input = input('Enter an expression: ') # Suppose the user types: 3 + 4 result = eval(user_input) print(result) # This will output: 7
在此示例中,系统提示用户输入表达式。如果输入3 + 4,则函数input()re "3 + 4"。f 。eval()``7
3 + 4
input()
"3 + 4"
eval()``7
当你 w 时使用eval(input('blah'))会很有用
虽然eval()可以是 p eval()wil
考虑以下情况
eval(input('Enter something to evaluate: '))
如果用户输入:
__import__('os').system('rm -rf /')
此命令可能会删除基于 Unix 的系统上的所有文件(如果脚本以适当的权限运行)。
对于许多用例,有更安全的替代方案eval()。如果您只需要评估数学表达式,则可以使用模块ast.literal_eval()中的函数ast,它可以安全地评估表达式节点或包含 Python 文字或容器显示的字符串。
ast.literal_eval()
ast
import ast user_input = input('Enter a number or expression: ') # Suppose the user types: [1, 2, 3] result = ast.literal_eval(user_input) print(result) # This will output: [1, 2, 3]
ast.literal_eval()仅评估文字和容器(字符串、数字、元组、列表、字典、布尔值和None),这使得它比安全得多eval()。
None
总之,eval(input('blah'))将用户输入评估为 Python 表达式,但由于潜在的安全风险,应谨慎使用。使用时,请务必考虑上下文和潜在威胁eval()。