登录  /  注册

Python内置函数——compile

黄舟
发布: 2017-01-19 16:42:37
原创
2059人浏览过

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中文网(www.php.cn)!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号