返回

Python eval() 与 exec() 是如何让代码来执行代码

后端

Python eval() 与 exec() 是如何让代码来执行代码

在 Python 中,eval()exec() 函数都允许你动态地执行代码。eval() 函数可以执行一个字符串表达式,而 exec() 函数可以执行一个字符串语句或代码块。

eval() 函数

eval() 函数的语法如下:

eval(expression, globals=None, locals=None)

其中,expression 是一个字符串类型的表达式或代码对象,用单引号或双引号括起来。globalslocals 是可选参数,分别指定全局变量和局部变量的字典。

eval() 函数会将 expression 参数中的代码解析成 Python 对象,然后执行该对象。例如,下面的代码将字符串 "1 + 2" 解析成一个整数对象,然后将其打印出来:

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

eval() 函数还可以执行更复杂的表达式,例如:

>>> eval("x + y")
42

其中,xy 是全局变量。

exec() 函数

exec() 函数的语法如下:

exec(statement, globals=None, locals=None)

其中,statement 是一个字符串类型的语句或代码块,用单引号或双引号括起来。globalslocals 是可选参数,分别指定全局变量和局部变量的字典。

exec() 函数会将 statement 参数中的代码解析成 Python 语句或代码块,然后执行该语句或代码块。例如,下面的代码将字符串 "print("Hello, world!")" 解析成一个 print() 语句,然后执行该语句:

>>> exec("print('Hello, world!')")
Hello, world!

exec() 函数还可以执行更复杂的语句或代码块,例如:

>>> exec("def say_hello(name):\n\tprint(f'Hello, {name}!')\nsay_hello('John')")
Hello, John!

eval() 和 exec() 的区别

eval()exec() 函数的主要区别在于,eval() 函数只能执行表达式,而 exec() 函数可以执行语句或代码块。

此外,eval() 函数的返回值是表达式执行结果,而 exec() 函数没有返回值。

如何使用 eval() 和 exec() 来实现动态代码执行

eval()exec() 函数可以用来实现动态代码执行。例如,你可以使用 eval() 函数来动态地计算一个表达式的值,或者使用 exec() 函数来动态地执行一段代码。

你还可以使用 eval()exec() 函数来实现交互式编程。例如,你可以使用 eval() 函数来动态地执行用户输入的表达式,或者使用 exec() 函数来动态地执行用户输入的代码块。

总结

eval()exec() 函数都是非常强大的工具,可以用来实现动态代码执行。但是,你需要谨慎地使用这两个函数,因为它们可能会导致安全问题。