python的exec、eval使用分析


Posted in Python onDecember 11, 2017

简介

python 动态执行字符串代码片段(也可以是文件), 一般会用到exec,eval。

exec

exec_stmt ::= "exec" or_expr ["in" expression ["," expression]]

注意:exec 是一个语法声明,不是一个函数.也就是说和if,for一样.

官方文档对于exec的解释

This statement supports dynamic execution of Python code.

exec的第一个表达式可以是:

1.代码字符串
2.文件对象
3.代码对象
4.tuple

前面三种情况差不多,第四种比较特殊最后讲

如果忽略后面的可选表达式,exec后面代码将在当前域执行

>>> a=2
>>> exec "a=1"
>>> a
>>>

如果在表达式之后使用in选项指定一个dic,它将作为global和local变量作用域

>>> a=10
>>> b=20
>>> g={'a':6,'b':8}
>>> exec "global a;print a,b" in g
>>>

如果in后详指定两个表达式,它们将分别用作global和local变量作用域

>>> a=10
>>> b=20
>>> c=20
>>> g={'a':6,'b':8}
>>> l={'b':9,'c':10}
>>> exec "global a;print a,b,c" in g,l
>>>

现在说下tuple的情况,这也是导致很多人误以为exec是一个函数的原因。

如果第一个表达式是tuple

exec(expr, globals) #它等效与 exec expr in globals
exec(expr, globals, locals) #它等效与 exec expr in globals,locals

eval

eval通常用来执行一个字符串表达式,并返回表达式的值。

eval(expression[, globals[, locals]])

有三个参数,表达式字符串,globals变量作用域,locals变量作用域。 其中第二个和第三个参数是可选的。

如果忽略后面两个参数,则eval在当前作用域执行。

>>> a=1
>>> eval("a+1")
>>>

如果指定globals参数

>>> a=1
>>> g={'a':10}
>>> eval("a+1",g)
>>>

如果指定locals参数

>>> a=10
>>> b=20
>>> c=20
>>> g={'a':6,'b':8}
>>> l={'b':9,'c':10}
>>> eval("a+b+c",g,l)
>>>

如果要严格限制eval执行,可以设置globals为__builtins__,这样 这个表达式只可以访问__builtin__ module。

总结

exec,eval给我带来了极大的灵活性,同时也带来了隐含的危险性, 当我们使用它们的时候应该总是记得详细指定其执行的作用域。

以上就是本文关于python的exec、eval使用分析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
Python发送form-data请求及拼接form-data内容的方法
Mar 05 Python
基于python实现在excel中读取与生成随机数写入excel中
Jan 04 Python
Django中url的反向查询的方法
Mar 14 Python
Python实现ping指定IP的示例
Jun 04 Python
Python实现查询某个目录下修改时间最新的文件示例
Aug 29 Python
Numpy将二维数组添加到空数组的实现
Dec 05 Python
python生成并处理uuid的实现方式
Mar 03 Python
Python打印特殊符号及对应编码解析
May 07 Python
python实现录音功能(可随时停止录音)
Oct 26 Python
python中requests模拟登录的三种方式(携带cookie/session进行请求网站)
Nov 17 Python
python 高阶函数简单介绍
Feb 19 Python
详解Python为什么不用设计模式
Jun 24 Python
Python中eval带来的潜在风险代码分析
Dec 11 #Python
Python验证文件是否可读写代码分享
Dec 11 #Python
Python文件操作基本流程代码实例
Dec 11 #Python
Python使用Turtle模块绘制五星红旗代码示例
Dec 11 #Python
浅析Git版本控制器使用
Dec 10 #Python
python中Apriori算法实现讲解
Dec 10 #Python
Python自动化运维之IP地址处理模块详解
Dec 10 #Python
You might like
CodeIgniter安全相关设置汇总
2014/07/03 PHP
(推荐一个超好的JS函数库)S.Sams Lifexperience ScriptClassLib
2007/04/29 Javascript
jquery.pagination.js 无刷新分页实现步骤分享
2012/05/23 Javascript
jQuery 借助插件Lavalamp实现导航条动态美化效果
2013/09/27 Javascript
我用的一些Node.js开发工具、开发包、框架等总结
2014/09/25 Javascript
jQuery中before()方法用法实例
2014/12/25 Javascript
AngularJS+Node.js实现在线聊天室
2015/08/28 Javascript
JavaScript中使用数组方法汇总
2016/02/16 Javascript
探索angularjs+requirejs全面实现按需加载的套路
2016/02/26 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
2016/09/17 Javascript
Javascript中Promise的四种常用方法总结
2017/07/14 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
2017/09/28 Javascript
JS一次前端面试经历记录
2020/03/19 Javascript
tracking.js实现前端人脸识别功能
2020/04/16 Javascript
[41:17]完美世界DOTA2联赛PWL S3 access vs CPG 第二场 12.13
2020/12/17 DOTA
Python网络编程使用select实现socket全双工异步通信功能示例
2018/04/09 Python
Python基于百度云文字识别API
2018/12/13 Python
关于pytorch中网络loss传播和参数更新的理解
2019/08/20 Python
解决python图像处理图像赋值后变为白色的问题
2020/06/04 Python
浅谈Python协程
2020/06/17 Python
Python实现爬取并分析电商评论
2020/06/19 Python
公认8个效率最高的爬虫框架
2020/07/28 Python
长辈证婚人证婚词
2014/01/09 职场文书
会计自我鉴定
2014/02/04 职场文书
银行简历自我评价
2014/02/11 职场文书
奥利奥广告词
2014/03/20 职场文书
小学生演讲稿大全
2014/04/25 职场文书
餐厅筹备计划书
2014/04/25 职场文书
销售员岗位职责
2014/06/09 职场文书
一年级语文上册复习计划
2015/01/17 职场文书
物流仓管员岗位职责
2015/04/01 职场文书
导游词之唐山景点
2019/12/18 职场文书
SONY AN-LP1 短波有源天线放大器
2021/04/22 无线电
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
2021/05/31 Python
MySQL的Query Cache图文详解
2021/07/01 MySQL
Python使用pyecharts控件绘制图表
2022/06/05 Python