在Python动态执行的函数中,exec是用于执行一个字符串内包含的Python源码或其编译后对应的字节码。

一、    语法

1.    exec(Code, globals=None, locals=None)

2.    参数说明

本函数的参数与eval的参数及含义完全相同,不过第一个参数eval函数要求是表达式字符串或其编译的字节码,exec要求是Python语句或语句块或其编译的代码,如果是编译的代码,要求是‘exec’模式编译,如果表达式,则也不会报错,但达不到eval返回计算值的效果;

3.    返回值

如果代码能正常执行该函数返回值是 None,因此对应代码不能用return和 yield返回数据。

二、    exec与语法与eval对比

1.    exec与语法与eval 类似,都属于动态执行,有相同的参数,都可以直接处理字符串,也可以处理compile处理后的字节码;

2.    不同的地方包括3个方面:

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

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

3)    如果是参数中传递的是compile 的字节码,则compile调用时的mode参数取值不同。

三、    举例:

1.    用三引号定义了一个包含Python代码的字符串

s='''
person=['张三','李四']
for p in person:
   print('name=',p)
while(True):
    s=input("I will exit,are you ready(y/n)?")
    if s=='Y': break;
    if s=='y': break;
'''

2.    带一个匿名名字空间作为全局名字空间执行该语句:exec(s,{}),执行后输入‘y’退出,s的值保持不变

3.    不带全局名字空间和局部名字空间执行该语句:exec(s),执行后输入‘y’退出,s的值变成‘y’,说明该代码段在当前执行exec调用的名字空间中执行,并访问了相关变量,导致变量s的值被篡改

上述案例全部截屏:

本节老猿详细介绍了动态执行的exec函数及各个参数,并结合例子介绍了相关方法的使用。从上述介绍以及案例可以说,exec函数就是一个完整版本的Python编译器,它可以将一个完整的Python源文件完整的执行。这也就是老猿说exec是自说自话。老猿其实很想做一个测试,就是用一个动态执行的Python代码读取自身的源代码再去执行,是否形成递归调用呢?不知道是什么效果,有兴趣的同学可以自己试。

老猿Python(https://blog.csdn.net/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。

欢迎大家批评指正,谢谢大家关注!

最新文章

  1. jquery和Js的区别和基础操作
  2. Java工程师层级
  3. [连载]《C#通讯(串口和网络)框架的设计与实现》-4.设备驱动管理器的设计
  4. 读Javascript高级程序设计第三版第六章面向对象设计--创建对象
  5. 12款最佳的 WordPress 语法高亮插件推荐
  6. iostat监控磁盘io
  7. IbatisNet的介绍和使用
  8. 动态链接--so的搜索过程
  9. mvc 用户控件 ascx 获取 View 页面的值
  10. 关于存储的--b
  11. GEF-whole-upload教程中遇到的问题及解决方案
  12. Hibernate入门这一篇就够了
  13. mvc 母版页保持不刷新
  14. 043 hive数据同步到mysql
  15. COMSOL
  16. oracle 修改表结构,增加列,删除列等
  17. 【2017-03-23】CSS基础:内联样式
  18. ANDROID init进程
  19. iphone开发之解决viewWillAppear失效
  20. PCL滤波介绍(2)

热门文章

  1. 水题挑战6: CF1444A DIvision
  2. awk1
  3. tcp 输入 简析 转载
  4. dst_output发包
  5. 删除ceph集群mds
  6. TypeScript 引入第三方包,报无法找到模块错误
  7. 一些 git 常用的命令
  8. Windows SMBv3 CVE-2020-0796 漏洞分析和l漏洞复现
  9. [web安全原理]PHP命令执行漏洞基础
  10. 巧妙运用Camtasia制作爱豆的动感影集