Python标准库:内置函数compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)
来源:互联网 发布:淘宝客服大概多少工资 编辑:程序博客网 时间:2024/06/07 02:36
这个函数用来编译一段字符串的源码,结果可以生成字节码或者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模式时,不需要在每个行后面输入换行符;在这个版本之后增加了优化参数。
例子:
#compile()str = "for i in range(0,10): print(i)"c = compile(str,'','exec') # 编译为字节代码对象exec(c) # 执行 str2 = "3*x + 4*y"c2 = compile(str2, '', 'eval') # 编译为表达式
输出结果如下:
0
1
2
3
4
5
6
7
8
9
蔡军生 QQ:9073204 深圳
- Python标准库:内置函数compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)
- Python标准库:内置函数print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
- Python标准库:内置函数enumerate(iterable, start=0)
- Python标准库:内置函数int(x=0)
- Python标准库:内置函数open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=T
- Python标准库:内置函数bytearray([source[, encoding[, errors]]])
- Python标准库:内置函数bytes([source[, encoding[, errors]]])
- Python标准库:内置函数bytes([source[, encoding[, errors]]])
- Python标准库:内置函数int(x, base=10)
- python内置函数compile
- 1.imread函数 首先,我们看imread函数,可以在OpenCV官方文档中查到其原型如下: Mat imread(const string& filename, int flags=1
- hive hive.optimize.ppd=false导致map数量很大
- CString strExt=filename.Right(filename.GetLength()-filename.ReverseFind('.')-1);
- Python标准库:内置函数eval(expression, globals=None, locals=None)
- Python标准库:内置函数eval(expression, globals=None, locals=None)
- Python标准库:内置函数__import__(name, globals=None, locals=None, fromlist=(), level=0)
- filename=${fileuser:-"filename"} 含义
- Python标准库:内置函数abs(x)
- 理解 Lua 的那些坑爹特性
- Android之Handler用法总结
- Android4.x 如何处理Power按键
- HDU 2204 - Eddy's爱好 (容斥原理)
- Android学习笔记(一)
- Python标准库:内置函数compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)
- Python的惯用法技巧和创建型设计模式
- java中ImageIO.write(bufferedImage输出图片时,图片的改变问题
- lua how to
- 关于cssHack
- CString类型字符串,转换到 BYTE类型
- 全局变量如果不初始化,则默认为0,编译时编译器不提示“变量未初始化”
- Struts2内置校验器
- 通过java访问HDFS