python内置函数exec()和eval()区别

在Python中,eval() 和 exec() 都是内置函数,用于执行存储在字符串或对象中的Python代码,但它们之间也有一些区别。

eval()

语法:eval(expression, globals=None, locals=None)

  • expression:需要求值的字符串表达式。可以是一个有效的Python表达式、一个代码块或一个对象。
  • globals(可选):表示全局命名空间的字典。提供该参数可以在求值时使用指定的全局变量。
  • locals(可选):表示局部命名空间的字典。提供该参数可以在求值时使用指定的局部变量。

用途:eval()通常用于计算单个表达式的值,例如用户输入的数学表达式,执行后并返回表达式的值。

示例:

计算加法表方式

复制代码
number = 10
print(eval('number + 1'))
#结果
11

参数传一个字典,执行时会使用字典中的值

复制代码
number = 10
print(eval('number + 1',globals(),{'number':100}))
#结果
101

exec()

语法:exec(object[, globals[, locals]])

  • object:要执行的代码,可以是一个字符串或代码对象。
  • globals和locals与eval()中的含义相同。

用途:exec()通常用于动态执行一组Python代码,例如从文件中读取Python代码并执行,而且exec()执行后不返回值,只是执行代码。

示例:

#计算表达式的值

复制代码
eval(""" 
x = 1 
y = 2 
print(x + y) 
""")
#结果
3

#打开文件2.txt,获取代码,文件中代码如同上面执行的表达式

复制代码
exec(str(open('2.txt').readlines()))
#结果
3

#与complie函数结合使用

复制代码
code_object = compile(""" 
x = 1 
y = 2 
print(x + y) 
""", 'my_script', 'exec')
#传入complie对象
exec(code_object)

安全性考虑

使用eval()和exec()时要特别小心,因为它们可以执行任意的Python代码。如果这些函数执行的代码来自不可信的源(如用户输入),那么它们可能会被利用来执行恶意代码。

共勉: 东汉·班固《汉书·枚乘传》:"泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。"

-----指水滴不断地滴,可以滴穿石头;

-----比喻坚持不懈,集细微的力量也能成就难能的功劳。

----感谢读者的阅读和学习和关注,谢谢大家。

相关推荐
Lyyaoo.3 分钟前
【JAVA基础面经】JVM的内存模型
java·开发语言·jvm
杨凯凡4 分钟前
【017】泛型与通配符:API 设计里怎么用省心
java·开发语言
Java后端的Ai之路9 分钟前
Text-to-SQL与智能问数完全指南:基本概念、核心原理、Python实战教学及企业项目落地
数据库·python·sql·text-to-sql·智能问数
2301_7826591813 分钟前
如何使用Navicat连接云端MariaDB_白名单与实例配置
jvm·数据库·python
2301_803875616 小时前
PHP 中处理会话数组时的类型错误解析与修复指南
jvm·数据库·python
m0_743623926 小时前
c++如何批量修改文件后缀名_std--filesystem--replace_extension【实战】
jvm·数据库·python
2401_873479407 小时前
如何利用IP查询定位识别电商刷单?4个关键指标+工具配置方案
开发语言·tcp/ip·php
我爱cope7 小时前
【从0开始学设计模式-10| 装饰模式】
java·开发语言·设计模式
2501_914245937 小时前
CSS如何处理CSS变量作用域冲突_利用特定类名重写变量值
jvm·数据库·python
菜鸟学Python7 小时前
Python生态在悄悄改变:FastAPI全面反超,Django和Flask还行吗?
开发语言·python·django·flask·fastapi