小能豆

Python 的 eval() 有什么作用?

python

我正在阅读的有关 Python 的书反复显示如下代码eval(input(‘blah’))。

这究竟如何修改调用的结果input?


阅读 45

收藏
2024-06-28

共1个答案

小能豆

eval()中的函数表示eval(input('blah'))程序正在从用户那里获取输入,然后将其作为 Python 表达式进行评估。下面是它的分步工作原理:

  1. input('blah'):这部分代码向用户提示字符串'blah',并等待用户输入内容并按 Enter。用户输入的任何内容都会以字符串形式返回。
  2. eval():该函数接受一个 str 并eval()执行它并返回结果。

例子

这是一个简单的

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

Potential Us

当你 w 时使用eval(input('blah'))会很有用

S

虽然eval()可以是 p eval()wil

安全风险示例

考虑以下情况

eval(input('Enter something to evaluate: '))

如果用户输入:

__import__('os').system('rm -rf /')

此命令可能会删除基于 Unix 的系统上的所有文件(如果脚本以适当的权限运行)。

更安全的选择

对于许多用例,有更安全的替代方案eval()。如果您只需要评估数学表达式,则可以使用模块ast.literal_eval()中的函数ast,它可以安全地评估表达式节点或包含 Python 文字或容器显示的字符串。

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()

总之,eval(input('blah'))将用户输入评估为 Python 表达式,但由于潜在的安全风险,应谨慎使用。使用时,请务必考虑上下文和潜在威胁eval()

2024-06-28