Python之浅谈exec函数
在Python中,exec()是一个十分有趣且使用的内置函数,不同于eval()函数只能执行计算数学表达式的结果的功能,exec()能够动态地执行复杂的Python代码,能够十分强大。具体的介绍可以参考官方文档: https://docs.python.org/3/library/functions.html#exec 。
本次分享讲简单聊聊exec()函数的用法,希望能给读者一点启示和参考。
首先是一个简单的小例子,代码如下:
i = 12
j = 13
exec("answer=i*j")
print("Answer is %s"%answer)
该代码的输出结果为:
Answer is 156
这表明第三句的exec()函数能够正确地执行Python代码,并且能将计算结果赋予answer变量,就像真正的Python代码一样。
那么,我们能不能让exec()函数执行一个复杂的Python代码呢?Why not?请看一下例子:
func = "def fact(n):\n\treturn 1 if n==1 else n*fact(n-1)"
exec(func)
a = fact(5)
print(a)
func为字符串,它是一个递归地计算整数阶乘的函数。因为exec()仅支持string和code object参数,所以我们要将该递归函数转化成一个字符串,当然,格式还是要Python代码的格式来,注意换行和缩进。刚才例子的输出结果为:
120
可能有些读者纳了闷了,这些代码不是直接能够在Python中执行吗,为何还要多此一举地把它写成字符串,并用exec()执行呢?笔者的答案是,刚才的例子只是为了演示exec()函数的基本用法,它的强大之处远不止于此。
在实际项目中,我们有些时候会将Python代码写入一些文件中,举个例子,如以下的eg.txt,它储存了我们想要的Python代码,如下:
def fact(n):if n==1:return 1else:return n*fact(n-1)
t = fact(6)
print(t)
请再次注意,这是一个txt格式的Python代码。那么,我们如何调用它呢?答案就是exec()函数,代码如下:
with open('E://eg.txt', 'r') as f:s = f.read()exec(s)
在上述代码中,我们先读取eg.txt文件的内容,再转交exec()函数执行,输出结果如下:
720
是不是有点棒呢?除了能执行string和code object外,还可以在exec()函数中加入参数,参数的传递可以写成字典(dict)形式。具体的使用方法可以参考下面的例子:
x = 10expr = """
z = 30
sum = x + y + z
print(sum)
"""def func():y = 20exec(expr)exec(expr, {'x': 1, 'y': 2})exec(expr, {'x': 1, 'y': 2}, {'y': 3, 'z': 4})func()
其输出结果如下:
60
33
34
在expr语句中,有三个变量x,y,z,其中z值已给定,我们可以在exec()函数外指定x,y的值,也可以在exec()函数中以字典的形式指定x,y的值。在最后的语句中,我们给出了x,y,z的值,并且y值重复,exec()函数接收后面一个y值,且z值传递不起作用,因此输出结果为34.
本次分享到此结束。本文介绍了几个exec()函数使用的例子,希望能抛砖引玉,也欢迎大家多多交流~~
Python之浅谈exec函数相关推荐
- Python实例浅谈--Python与C/C++相互调用
转载链接:Python实例浅谈之三Python与C/C++相互调用_乌托邦2号的博客-CSDN博客_python 调用c++类 目录 一.问题 二.Python调用C/C++ 1.Python调用C动 ...
- 浅谈云函数的代理IP利用面
浅谈云函数的代理IP利用面 前言 本篇文章介绍如何通过 Serverless(云函数) 实现各种扫描器探测功能,以达到绕过态势感知.WAF等安全设备,增大蓝队研判人员溯源难度,实现封无可封,查无可查的 ...
- Python实例浅谈之三Python与C/C++相互调用
参考:http://blog.csdn.net/taiyang1987912/article/details/44779719 Python实例浅谈之三Python与C/C++相互调用 二.Pytho ...
- Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理
基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客 QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3 ...
- python文本框与数据库的关联_Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理...
基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客 QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3. ...
- 浅谈async函数await用法
async和await相信大家应该不陌生,让异步处理变得更友好. 其实这玩意儿就是个Generator的语法糖,想深入学习得去看看Generator,不然你可能只停留在会用的阶段. 用法很简单,看代码 ...
- python axes_浅谈matplotlib.pyplot与axes的关系
最近在学习数据可视化,梳理一下其中一些诸如pandas绘图.matplotlib绘图.pyplot(plt).axes等概念. 重要的事情说三遍:axes不是axis!axes不是axis!axes不 ...
- 浅谈Python3函数命名空间与作用域
日期:2020年1月23日 作者:Commas 注释:前一章节讲述了命名空间和作用域的知识,现在我们来谈一谈Python3函数的命名空间吧. 如果您想了解更多有关Python的知识,那么请点<我 ...
- python bokeh_浅谈python可视化包Bokeh
本文研究的主要是python可视化包Bokeh的相关内容,具体如下. 问题:需要把pandas的数据绘图并通过网页显示,matplotlib需要先保存图像,不合适. 解决:在网上搜了一下,找到一篇介绍 ...
最新文章
- Visual Studio找不到adb.exe错误解决
- scrapy爬虫程序xpath中文编码报错
- Linux命令行参数前加--,-和不加杠
- Codeforces Round #740 (Div. 2) E. Bottom-Tier Reversals 构造
- 为什么使用GB28181而不是直接rtsp拉流
- 部署系统到linux服务器,若依管理系统部署到linux(上)
- 使用dd命令制作ISO镜像U盘启动盘
- mac os+selenium2+chrome驱动+python3
- oracle密码过期修改
- st语言 数组的常用方法_ST语言入门基础
- word一级标题行距一样宽度不一致
- QCC512x QCC302x earbud工程 LED 配置
- 基于51单片机的烟雾火灾报警系统
- 房产管理系统系统与数据中心对接要遵循的标准和规范
- c语言实现灰度图转换
- 操作系统——磁盘操作
- VIM编辑基础及其他知识点
- autojs怎么暂停脚本_三国群英传8脚本已暂停名片点赞autojs
- RibbonGatewayopenFeign
- 经管文本分析 | 金融学文本大数据挖掘方法与研究进展阅读笔记