在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函数相关推荐

  1. Python实例浅谈--Python与C/C++相互调用

    转载链接:Python实例浅谈之三Python与C/C++相互调用_乌托邦2号的博客-CSDN博客_python 调用c++类 目录 一.问题 二.Python调用C/C++ 1.Python调用C动 ...

  2. 浅谈云函数的代理IP利用面

    浅谈云函数的代理IP利用面 前言 本篇文章介绍如何通过 Serverless(云函数) 实现各种扫描器探测功能,以达到绕过态势感知.WAF等安全设备,增大蓝队研判人员溯源难度,实现封无可封,查无可查的 ...

  3. Python实例浅谈之三Python与C/C++相互调用

    参考:http://blog.csdn.net/taiyang1987912/article/details/44779719 Python实例浅谈之三Python与C/C++相互调用 二.Pytho ...

  4. Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理

    基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客  QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3 ...

  5. python文本框与数据库的关联_Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理...

    基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客 QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3. ...

  6. 浅谈async函数await用法

    async和await相信大家应该不陌生,让异步处理变得更友好. 其实这玩意儿就是个Generator的语法糖,想深入学习得去看看Generator,不然你可能只停留在会用的阶段. 用法很简单,看代码 ...

  7. python axes_浅谈matplotlib.pyplot与axes的关系

    最近在学习数据可视化,梳理一下其中一些诸如pandas绘图.matplotlib绘图.pyplot(plt).axes等概念. 重要的事情说三遍:axes不是axis!axes不是axis!axes不 ...

  8. 浅谈Python3函数命名空间与作用域

    日期:2020年1月23日 作者:Commas 注释:前一章节讲述了命名空间和作用域的知识,现在我们来谈一谈Python3函数的命名空间吧. 如果您想了解更多有关Python的知识,那么请点<我 ...

  9. python bokeh_浅谈python可视化包Bokeh

    本文研究的主要是python可视化包Bokeh的相关内容,具体如下. 问题:需要把pandas的数据绘图并通过网页显示,matplotlib需要先保存图像,不合适. 解决:在网上搜了一下,找到一篇介绍 ...

最新文章

  1. Visual Studio找不到adb.exe错误解决
  2. scrapy爬虫程序xpath中文编码报错
  3. Linux命令行参数前加--,-和不加杠
  4. Codeforces Round #740 (Div. 2) E. Bottom-Tier Reversals 构造
  5. 为什么使用GB28181而不是直接rtsp拉流
  6. 部署系统到linux服务器,若依管理系统部署到linux(上)
  7. 使用dd命令制作ISO镜像U盘启动盘
  8. mac os+selenium2+chrome驱动+python3
  9. oracle密码过期修改
  10. st语言 数组的常用方法_ST语言入门基础
  11. word一级标题行距一样宽度不一致
  12. QCC512x QCC302x earbud工程 LED 配置
  13. 基于51单片机的烟雾火灾报警系统
  14. 房产管理系统系统与数据中心对接要遵循的标准和规范
  15. c语言实现灰度图转换
  16. 操作系统——磁盘操作
  17. VIM编辑基础及其他知识点
  18. autojs怎么暂停脚本_三国群英传8脚本已暂停名片点赞autojs
  19. RibbonGatewayopenFeign
  20. 经管文本分析 | 金融学文本大数据挖掘方法与研究进展阅读笔记

热门文章

  1. linux vi 保存退出与不保存退出
  2. 博主文章导航(分门别类,实时更新,永久置顶)
  3. OSI七层网络模型 TCP五层网络模型
  4. 单行文本省略号和多行文本省略号
  5. SQL语句一二三之SQL基本语句
  6. 207399-07-3,IR-780;IR-808;1558079-49-4,IR-825
  7. 从网页复制内容到富文本、或者富文本里自己加样式,当ajax传参时候,总是莫名其妙丢失变成无意义的html,究竟是为什么呢
  8. 【误差】方差、标准差、均方误差和均方根误差的区别总结
  9. 第三代电力电子半导体:SiC MOSFET学习笔记(一)SiC兴起
  10. Linux基础命令----tail 查看文件尾部内容