python 内置函数 compile()

这个函数用来编译一段字符串的源码,结果可以生成字节码或者AST(抽像语法树),字节码可以使用函数exec()来执行,而AST可以使用eval()来继续编译。

参数source是一串字符串的源码,或者是AST对象数组。

参数filename是读取字符串的文件对象,如果不是从文件里读取源码来编译,那么这里可以放一些用来标识这些代码的字符串。

参数mode是用来指明那种表示的源码类型;如果是exec类型,表示这是一个序列语句,可以进行运行;如果是eval类型,表示这是一个单一的表达式语句,可以用来计算相应的值出来;如果是single类型,表示这是一个单一语句,采用交互模式执行,在这种情况下,如果是一个表达式,一般会输出结果,而不是打印为None输出。

可选参数flags和dont_inherit是用来控制编译源码时的标志,可以查看PEP236文档来了解这些参数,以及相关编译的说明。如果两者使用缺省参数(也即两者都是零值),在调用本函数编译时,主要使用代码中指明的编译特征来对待;如果flags参数设置有值,而dont_inherit没有设置(即是零值),那么编译代码时,不仅源码的编译特征起作用,而且flags指明的特征也起作用,相当两者的并集;如果参数dont_inherit设置有值(即是非零值),编译语句时只有参数flags指明的编译特征值起作用,即是不使用源码里指明的特征。

编译特征是按位图的方式设置到参数里,可以查看__future__。

可选参数optimize是用来指明编译器使用优化的等级;缺省值是-1,表示使用命令行参数-O中获取的优化等级为准;如果设置值为0(即是不用优化,__debug__是设置true),是没有优化;如果设置值为1,assert语句被删除,__debug__设置为false;如果设置值为2,除了设置值为1的功能之外,还会把代码里文档说明也删除掉,达到最佳优化结果。

本函数编译代码时,如果语法出错会返回SyntaxError;如果代码包含一些空字节,则返回类型错误TypeError。

注意事项:当采用single或eval类型编译时,如果有多行代码,每行代码后面至少有一个换行符,否则在code模块编译时就会提示编译的源码不完整错误。在Python 3.2版本之后,允许输入Windows或Mac的换行符;当采用exec模式时,不需要在每个行后面输入换行符;在这个版本之后增加了优化参数。

1 a = '''name = input("请输入:")'''

2

3 t = compile(a,'','single') #编译为交互式模式 ' ' filename,不从文件读取,也得写个空字符串

4 exec(t)5 print(name) #name会报警,不用管

6 #compile()

7 str = "for i in range(0,10): print(i)"

8 c = compile(str,'','exec') #编译为字节代码对象

9 exec(c) #执行

10 输出:11 012 1

13 2

14 3

15 4

16 5

17 6

18 7

19 8

20 9

21

22 str2 = "3*x + 4*y"

23 c2 = compile(str2, '', 'eval') #编译为表达式

• source -- 字符串或者AST(Abstract Syntax Trees)对象。。

• filename -- 代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。

• mode -- 指定编译代码的种类。可以指定为 exec, eval, single。

• flags -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。。

• flags和dont_inherit是用来控制编译源码时的标志

python compile函数_python 内置函数 compile()相关推荐

  1. decode函数_Python 内置函数总一

    内置函数 python内置函数,截至python3.6.2版本之前一共68个内置函数,内置函数是可以直接使用的函数. Python标准库/内置函数链接:点击此处 内置函数分类 作用域相关 基于字典的形 ...

  2. python内置方法就是内置函数_python内置函数

    什么是内置函数? 就是python给你提供的,拿来直接用的函数, 比如print 和 input等等. 截止到python版本3.6.2 python一共提供了68个内置函数. 他们就是python直 ...

  3. python filter内置函数_python 内置函数filter

    python 内置函数filter class filter(object): """ filter(function or None, iterable) --> ...

  4. python内置的数字运算函数_Python 内置函数1

    abs(x)函数 返回绝对值 参数可以是:负数.正数.浮点数或者长整形 print(abs(-1.2)) # 结果1.2 cmp(x, y)函数 (python3已删) 中文说明: 比较两个对象x和y ...

  5. python property函数_Python内置函数property()如何使用

    代码 class Shuxing(): def __init__(self, size = 10): self.size = size def getSize(self): print('getSiz ...

  6. exec是不是python的内置函数_Python内置函数(62)——exec

    英文文档: exec(object[, globals[, locals]])This function supports dynamic execution of Python code. obje ...

  7. python 乘法内置函数_Python内置函数--reversed()

    python内置了一些非常精巧且强大的函数,对初学者来说,一般不怎么用到,但是偶尔会碰到,我也是用了一段时间python之后才发现,哇还有这么好的函数,每个函数都非常经典,而且经过严格测试,使用内置函 ...

  8. python filter函数_python 内置函数filter

    python 内置函数filter class filter(object): """ filter(function or None, iterable) --> ...

  9. python的globals函数_Python内置函数之globals()与locals()

    Python内置函数globals() 函数与locals()函数简介. 在Python中,函数拥有自己的作用域,或者称为命名空间.在函数内访问某个变量会优先在函数自己的命名空间中进行访问. 而要想知 ...

最新文章

  1. 数位DP 回文序列 POJ-3280 Cheapest Palindrome
  2. 计算机基础在小学的教学论文,小学基础教育论文范文
  3. 阿里好的开源项目有哪些(善用工具)
  4. 2016年第七届蓝桥杯 - 省赛 - C/C++大学A组 - H. 四平方和
  5. 【263】Linux 添加环境变量 全局 shell 脚本
  6. Hive入门之数据类型
  7. linux内核剪裁 4412,itop4412开发板-Linux内核的编译
  8. 自己做的一个漫画下载器
  9. 黑苹果 10.14.6 安装记录
  10. 杨霖演讲实录∣从模块化架构到跨链生态,NULS这一年下了一盘怎么样的棋
  11. 计算机课word实验总结,大学计算机操作实践报告【实验8】Word2010综合实验
  12. 生成树技术(spanning tree)技术
  13. 树莓派2B使用360随身WiFi2代连接WiFi
  14. 数据结构与算法(回文数与括号匹配问题)
  15. android重力传感器横竖反,Android重力传感器--随重力旋转的图标
  16. 微信企业号接入微信支付
  17. vijos 1282128312841285 佳佳的魔法照片/魔法药水/魔杖/魔法阵
  18. ROSCon2018国际会议讲座录像和讲稿PPT
  19. 斯塔克尔伯格竞争模型
  20. 60.left join(左连接)

热门文章

  1. 斯坦福 AIMI 打造世界更大的开源医学数据集
  2. 预约直播!抢CSDN纪念卫衣:开源是在为爱发电?
  3. 不缺流量却变现乏力?穿山甲重磅打造《App 如何变现创收》系列课程帮你找症结...
  4. 西门子大中华区总裁兼CEO赫尔曼:智能自主制造将重塑工业格局!
  5. 每位开发者都应了解的数据库一致性!
  6. 12 岁赚钱买电脑,19 岁创立公司,戴尔传奇
  7. 首期「线上开发」直播出炉!轻量算法+轻量开发:AI 小白也能上手实操的一款图像分类器...
  8. 近一半程序员单身、年薪低于 15 万,程序员扎心现状大调查!
  9. 从 4 个月到 7 天:Netflix 开源自家框架 Metaflow,性能像坐上了火箭
  10. 程序员的遗憾:忽视数学必定后悔!