失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python内置函数用来返回序列中所有元素之和_Python内置函数——compile

python内置函数用来返回序列中所有元素之和_Python内置函数——compile

时间:2020-01-14 13:56:50

相关推荐

python内置函数用来返回序列中所有元素之和_Python内置函数——compile

Python内置函数——compile

compilecompile(source, filename, mode[, flags[, dont_inherit,[optimize]]])

1.这个函数用来编译一段字符串的源码,结果可以生成字节码或者AST(抽像语法树),

字节码可以使用函数exec()来执行,而AST可以使用eval()来继续编译。

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

3.参数filename是读取字符串的文件对象,

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

4.参数mode是用来指明那种表示的源码类型;

如果是exec类型,表示这是一个序列语句,可以进行运行;

如果是eval类型,表示这是一个单一的表达式语句,可以用来计算相应的值出来;

如果是single类型,表示这是一个单一语句,采用交互模式执行,

在这种情况下,如果是一个表达式,一般会输出结果,而不是打印为None输出。

5.可选参数flags和dont_inherit是用来控制编译源码时的标志,

可以查看PEP236文档来了解这些参数,以及相关编译的说明。

如果两者使用缺省参数(也即两者都是零值),

在调用本函数编译时,主要使用代码中指明的编译特征来对待;

如果flags参数设置有值,而dont_inherit没有设置(即是零值),

那么编译代码时,不仅源码的编译特征起作用,而且flags指明的特征也起作用,相当两者的并集;

如果参数dont_inherit设置有值(即是非零值),

编译语句时只有参数flags指明的编译特征值起作用,即是不使用源码里指明的特征。

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

6.可选参数optimize是用来指明编译器使用优化的等级;

缺省值是-1,表示使用命令行参数-O中获取的优化等级为准;

如果设置值为0(即是不用优化,__debug__是设置true),是没有优化;

如果设置值为1,assert语句被删除,__debug__设置为false;

如果设置值为2,除了设置值为1的功能之外,还会把代码里文档说明也删除掉,达到最佳优化结果。

7.本函数编译代码时,如果语法出错会返回SyntaxError;

如果代码包含一些空字节,则返回类型错误TypeError。

注意事项:

1.当采用single或eval类型编译时,

如果有多行代码,每行代码后面至少有一个换行符\,否则在code模块编译时就会提示编译的源码不完整错误。

在Python 3.2版本之后,允许输入Windows或Mac的换行符;

2.当采用exec模式时,不需要在每个行后面输入换行符;在这个版本之后增加了优化参数。In [16]: str = "for i in range(10): print(i)"

In [17]: c = compile(str,'','exec') #编译为字节代码对象

In [18]: exec(c)

0

1

2

3

4

5

6

7

8

9

In [19]: str = "3*x + 4*y"

In [20]: c = compile(str,'','eval') #编译为表达式

In [23]: x,y = 3,4

In [24]: eval(c)

Out[24]: 25

以上就是Python内置函数——compile的内容,更多相关内容请关注PHP中文网()!

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

如果觉得《python内置函数用来返回序列中所有元素之和_Python内置函数——compile》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。