zoukankan      html  css  js  c++  java
  • Python标准库:内置函数compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)

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

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

    參数filename是读取字符串的文件对象。假设不是从文件中读取源代码来编译。那么这里能够放一些用来标识这些代码的字符串。

    參数mode是用来指明那种表示的源代码类型;假设是exec类型,表示这是一个序列语句,能够进行运行;假设是eval类型,表示这是一个单一的表达式语句,能够用来计算对应的值出来。假设是single类型。表示这是一个单一语句。採用交互模式运行。在这样的情况下,假设是一个表达式,通常会输出结果。而不是打印为None输出。

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

    编译特征是按位图的方式设置到參数里,能够查看__future__

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

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

    注意事项:当採用singleeval类型编译时。假设有多行代码,每行代码后面至少有一个换行符,否则在code模块编译时就会提示编译的源代码不完整错误。在Python 3.2版本号之后,同意输入WindowsMac的换行符。当採用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  深圳
  • 相关阅读:
    数据攻略●R语言自述
    测试实例
    xml反射
    过滤器
    使用s标签来进行简单的表格配置
    将Spring、Hibernate、Struts2连接起来
    Spring容器
    初见Spring框架
    Spring框架的AOP
    Hibernate里面的几个方法
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/6849654.html
Copyright © 2011-2022 走看看