博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python的eval、exec函数使用总结
阅读量:6814 次
发布时间:2019-06-26

本文共 2106 字,大约阅读时间需要 7 分钟。

 

eval函数

一、函数的作用

将字符串str当成有效的表达式来求值并返回计算结果。它要执行的python代码只能是单个运算表达式(不支持任意形式的赋值操作),而不能是复杂的代码逻辑。

 

二、函数的定义

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

参数说明:

expression:必选参数,可以是字符串,也可以是一个任意的code对象实例(可以通过compile函数创建)。如果它是一个字符串,它会被当作一个python表达式进行分析和解释。

globals:可选参数,表示全局命名空间(存放全局变量),如果被提供,则必须是一个字典对象。

locals:可选参数,表示当前局部命名空间(存放局部变量),如果被提供,可以是任何映射对象。如果该参数被忽略,那么它将会取与globals相同的值。

如果globalslocals都被忽略,那么它们将取eval()函数被调用环境下的全局命名空间和局部命名空间。

返回值:

如果expression是一个code对象,且创建该code对象时,compile函数的mode参数是’exec’,那么eval()函数的返回值是None

否则,如果expression是一个输出语句,如print(),则eval()返回结果为None

否则,expression表达式的结果就是eval()函数的返回值

 

三、举几个栗子

(1)计算字符串中有效的表达式,并返回结果

[cpp]
  1. >>> eval('pow(2,2)')  
  2. 4  
  3. >>> eval('2 + 2')  
  4. 4  

 

(2)将字符串转成相应的对象(如listtupledictstring之间的转换)

[python]
  1. >>> a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"  
  2. >>> b = eval(a)  
  3. >>> b  
  4. [[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]  
  5. >>> a = "{1:'xx',2:'yy'}"  
  6. >>> c = eval(a)  
  7. >>> c  
  8. {
    1: 'xx', 2: 'yy'}  
  9. >>> a = "(1,2,3,4)"  
  10. >>> d = eval(a)  
  11. >>> d  
  12. (1, 2, 3, 4)  

 

(3)更改变量值

[cpp]
  1. x = 10  
  2. def func():  
  3.     y = 20  
  4.     a = eval('x+y')  
  5.     print "a=", a  
  6.     b = eval('x+y', {
    'x': 1, 'y': 2})  
  7.     print "b=", b  
  8.     c = eval('x+y', {
    'x': 1, 'y': 2}, {
    'y': 3, 'z': 4})  
  9.     print "c=", c  
  10. func()  

输出:

a= 30

b= 3

c= 4

 

exec函数

一、函数的作用

动态执行python代码,可以执行复杂的python代码

二、函数定义

exec(object[, globals[, locals]]]

参数说明:

object:必选参数,表示需要被指定的python代码,它必须是字符串或code对象。如果object是一个字符串,该字符串会被先解析为一组python语句,然后再执行。如果object是一个code对象,那么它只是被简单的执行

globals:可选参数,同eval函数

locals:可选参数,同eval函数

返回值:

exec函数的返回值永远为None

 

三、栗子

(1)实例1

因为exec返回值是None

所以 a = exec(‘x+y’),这条代码会报错。

改为exec(‘x+y’),可以正常执行

而d = eval(‘print(x,y)’),这条代码会报错

改为d = exec(‘print(x,y)’),可以正常执行

 

(2)实例2

[python]
  1. x = 10  
  2. expr = """ 
  3. z = 30 
  4. sum = x+y+z 
  5. print (sum) 
  6. """  
  7. def func():  
  8.     y = 20  
  9.     exec (expr)  
  10.     exec (expr, {
    'x': 1, 'y': 2})  
  11.     exec (expr, {
    'x': 1, 'y': 2}, {
    'y': 3, 'z': 4})  
  12. func()  

输出:

60

33

34

 

针对最后一条结果的输出,为什么z30不是4,梳理一下执行过程如下:

[python]
  1. x=1  
  2. y=2  
  3. def func():  
  4.     y=3  
  5.     z=4  
  6.    
  7.     z=30  
  8.     sum=x+y+z  
  9.     print(sum)  
  10. func()  

eval()函数与exec()函数的区别:

eval()函数只能计算单个表达式的值,而exec()函数可以动态运行代码段

eval()函数可以有返回值,而exec()函数返回值永远为None

 

原文:https://blog.csdn.net/xiaoquantouer/article/details/75049938

转载于:https://www.cnblogs.com/fmgao-technology/p/9060702.html

你可能感兴趣的文章
无标题文章正则表达式
查看>>
存储因管理员策略问题显示脱机解决方法
查看>>
Android Intent Action 大全
查看>>
4412开发板支持GPS高强度信号
查看>>
微信小程序开发-概述
查看>>
SSM(Spring,SpringMVC,MyBatis)用户登录
查看>>
vc代码获取文件版本信息
查看>>
mysql连接小错误一例
查看>>
奇怪的“考生”:中美高考,我都考一考!
查看>>
IBM P系列小型机故障的基本定位
查看>>
The connection cannot proceed because authentication is not enabled
查看>>
7天 搞定 ASP.NET MVC - 第3天
查看>>
云桌面无法识别ica文件
查看>>
分区 fdisk
查看>>
docker registry v2 nginx 安全访问控制
查看>>
Linux中查看各文件夹大小命令du -h --max-depth=1
查看>>
jdk配置
查看>>
DS Storage Manager 忘记管理密码恢复
查看>>
Linux的基本指令--
查看>>
主机屋好用
查看>>