本文最后更新于:2024年5月7日 下午
Python 支持通过 eval 函数执行字符串命令,本文记录相关内容。
eval
- eval() 函数用来执行一个字符串表达式,并返回表达式的值。
语法
- 以下是 eval() 方法的语法:
1 |
|
参数
- expression – 表达式。
- globals – 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
- locals – 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
示例
1 |
|
exec
- exec 执行储存在字符串或文件中的 Python 语句,相比于 eval,exec可以执行更复杂的 Python 代码。
语法
1 |
|
参数
- object:必选参数,表示需要被指定的 Python 代码。它必须是字符串或 code 对象。如果 object 是一个字符串,该字符串会先被解析为一组 Python 语句,然后再执行(除非发生语法错误)。如果 object 是一个 code 对象,那么它只是被简单的执行。
- globals:可选参数,表示全局命名空间(存放全局变量),如果被提供,则必须是一个字典对象。
- locals:可选参数,表示当前局部命名空间(存放局部变量),如果被提供,可以是任何映射对象。如果该参数被忽略,那么它将会取与 globals 相同的值。
返回值
exec 返回值永远为 None。
示例
1 |
|
1 |
|
区别示例
eval 仅执行表达式,复杂的语句无法执行,但可以使用 exec,以导入模块为例
-
导入模块时不可以使用
eval
函数如果我执行import vfs_tests as v,它就会起作用。但是,使用eval()的同一导入(如eval(‘import vfs_tests as v’))会引发语法错误。
-
eval只适用于表达式,import是一种语句,可以使用 exec 语句
-
exec('import vfs_tests as v')
1
2
3
4
5
6
> 额外地,对于导入模块也可以使用 importlib 模块:
>
> ```python
> import importlib
> mod = importlib.import_module('vfs_tests')
参考资料
- https://www.runoob.com/python/python-func-eval.html
- https://www.runoob.com/python3/python3-func-exec.html
文章链接:
https://www.zywvvd.com/notes/coding/python/python-eval/python-eval/
“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”
微信支付
支付宝支付
Python - eval 和 exec 函数
https://www.zywvvd.com/notes/coding/python/python-eval/python-eval/