[开篇三:Python零散知识拾荒之Python内置函数exec()、eval()以及complie()] 2018-09-09



示例先行之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"""

运行结果:

[开篇三:Python零散知识拾荒之Python内置函数exec()、eval()以及complie()] 2018-09-09_第1张图片
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)

运行结果:

[开篇三:Python零散知识拾荒之Python内置函数exec()、eval()以及complie()] 2018-09-09_第2张图片
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()、eval()以及complie()] 2018-09-09)