python compile函数_python 内置函数 compile()
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()相关推荐
- decode函数_Python 内置函数总一
内置函数 python内置函数,截至python3.6.2版本之前一共68个内置函数,内置函数是可以直接使用的函数. Python标准库/内置函数链接:点击此处 内置函数分类 作用域相关 基于字典的形 ...
- python内置方法就是内置函数_python内置函数
什么是内置函数? 就是python给你提供的,拿来直接用的函数, 比如print 和 input等等. 截止到python版本3.6.2 python一共提供了68个内置函数. 他们就是python直 ...
- python filter内置函数_python 内置函数filter
python 内置函数filter class filter(object): """ filter(function or None, iterable) --> ...
- python内置的数字运算函数_Python 内置函数1
abs(x)函数 返回绝对值 参数可以是:负数.正数.浮点数或者长整形 print(abs(-1.2)) # 结果1.2 cmp(x, y)函数 (python3已删) 中文说明: 比较两个对象x和y ...
- python property函数_Python内置函数property()如何使用
代码 class Shuxing(): def __init__(self, size = 10): self.size = size def getSize(self): print('getSiz ...
- exec是不是python的内置函数_Python内置函数(62)——exec
英文文档: exec(object[, globals[, locals]])This function supports dynamic execution of Python code. obje ...
- python 乘法内置函数_Python内置函数--reversed()
python内置了一些非常精巧且强大的函数,对初学者来说,一般不怎么用到,但是偶尔会碰到,我也是用了一段时间python之后才发现,哇还有这么好的函数,每个函数都非常经典,而且经过严格测试,使用内置函 ...
- python filter函数_python 内置函数filter
python 内置函数filter class filter(object): """ filter(function or None, iterable) --> ...
- python的globals函数_Python内置函数之globals()与locals()
Python内置函数globals() 函数与locals()函数简介. 在Python中,函数拥有自己的作用域,或者称为命名空间.在函数内访问某个变量会优先在函数自己的命名空间中进行访问. 而要想知 ...
最新文章
- 数位DP 回文序列 POJ-3280 Cheapest Palindrome
- 计算机基础在小学的教学论文,小学基础教育论文范文
- 阿里好的开源项目有哪些(善用工具)
- 2016年第七届蓝桥杯 - 省赛 - C/C++大学A组 - H. 四平方和
- 【263】Linux 添加环境变量 全局 shell 脚本
- Hive入门之数据类型
- linux内核剪裁 4412,itop4412开发板-Linux内核的编译
- 自己做的一个漫画下载器
- 黑苹果 10.14.6 安装记录
- 杨霖演讲实录∣从模块化架构到跨链生态,NULS这一年下了一盘怎么样的棋
- 计算机课word实验总结,大学计算机操作实践报告【实验8】Word2010综合实验
- 生成树技术(spanning tree)技术
- 树莓派2B使用360随身WiFi2代连接WiFi
- 数据结构与算法(回文数与括号匹配问题)
- android重力传感器横竖反,Android重力传感器--随重力旋转的图标
- 微信企业号接入微信支付
- vijos 1282128312841285 佳佳的魔法照片/魔法药水/魔杖/魔法阵
- ROSCon2018国际会议讲座录像和讲稿PPT
- 斯塔克尔伯格竞争模型
- 60.left join(左连接)
热门文章
- 斯坦福 AIMI 打造世界更大的开源医学数据集
- 预约直播!抢CSDN纪念卫衣:开源是在为爱发电?
- 不缺流量却变现乏力?穿山甲重磅打造《App 如何变现创收》系列课程帮你找症结...
- 西门子大中华区总裁兼CEO赫尔曼:智能自主制造将重塑工业格局!
- 每位开发者都应了解的数据库一致性!
- 12 岁赚钱买电脑,19 岁创立公司,戴尔传奇
- 首期「线上开发」直播出炉!轻量算法+轻量开发:AI 小白也能上手实操的一款图像分类器...
- 近一半程序员单身、年薪低于 15 万,程序员扎心现状大调查!
- 从 4 个月到 7 天:Netflix 开源自家框架 Metaflow,性能像坐上了火箭
- 程序员的遗憾:忽视数学必定后悔!