美文网首页技术篇-Java Python Linux DataBase
[开篇三:Python零散知识拾荒之Python内置函数exec

[开篇三:Python零散知识拾荒之Python内置函数exec

作者: Carl_TSNE | 来源:发表于2018-09-09 10:28 被阅读0次


    示例先行之exec()、eval()

    注:使用Python2作示例,2与3有区别,后文会提,其实区别没那么大。
    执行以下代码:

    #coding:utf-8
    
    #eval():
    #eval() 函数用来执行一个字符串表达式,并返回表达式的值。
    print '-----------------eval------------------'
    a=10
    b=60
    c=eval('a+b')
    print c
    print '-----------------exec------------------'
    #exec():
    #python2中exec()exec不是函数,而是一个内置语句(statement)。
    #但是Python 2中有一个 execfile() 函数。
    #可以理解为 Python 3 把 exec 这个 statement 和 execfile() 函数的功能够整合到一个新的 exec() 函数中去了。
    exec 'print "Hello World"'
    # 单行语句字符串
    exec "print 'runoob.com'"
    #  多行语句字符串
    exec """for i in range(5):print "iter time: %d" % i"""
    

    运行结果:

    eval&exec运行结果测试



    示例先行之complie()

    执行以下代码:

    #coding:utf-8
    
    '''compile() 函数将一个字符串编译为字节代码。'''
    str1 = "for i in range(0,10): print(i)"
    c = compile(str1,'','exec')   # 编译为字节代码对象 
    print c
    exec(c)
    print '--------------------------------------------'
    str2 = "3 * 4 + 5"
    a = compile(str2,'','eval')
    print eval(a)
    

    运行结果:

    complie运行结果测试



    eval()、exec()以及complie()使用说明以及注意事项


    • eval()
      1- eval() 函数用来执行一个字符串表达式,并返回表达式的值。
      2- 语法:
        eval(expression[, globals[, locals]])
       参数:
        expression -- 表达式。
        globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
        locals -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
       返回值:
        返回表达式计算结果。

    • exec()
      1- exec 执行储存在字符串或文件中的Python语句,相比于 eval,exec可以执行更复杂的 Python 代码。
        需要说明的是在 Python2 中exec不是函数,而是一个内置语句(statement),但是Python 2中有一个 execfile() 函数。可以理解为 Python 3 把 exec 这个 statement 和 execfile() 函数的功能够整合到一个新的 exec() 函数中去了。
      2- 语法:
        exec obj
       参数:
        obj -- 要执行的表达式。
       返回值:
        exec 返回值永远为 None。

    • complie()
      1- compile() 函数将一个字符串编译为字节代码。
      2- 语法:
        compile(source, filename, mode[, flags[, dont_inherit]])
       参数:
        source -- 字符串或者AST(Abstract Syntax Trees)对象。。
        vfilename -- 代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。
        mode -- 指定编译代码的种类。可以指定为 exec, eval, single。
        flags -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
        flags和dont_inherit是用来控制编译源码时的标志
       返回值:
        返回表达式执行结果。


    附:Python常见内置函数

    Python内置函数一览



    相关文章

      网友评论

        本文标题:[开篇三:Python零散知识拾荒之Python内置函数exec

        本文链接:https://www.haomeiwen.com/subject/ncurgftx.html