python compile、eval、exec内建函数

  1. compile函数

compile()函数允许程序员在运行时刻迅速生成代码对象,然后就可以用exec 语句或者内建函

数eval()来执行这些对象或者对它们进行求值。一个很重要的观点是:exec 和eval()都可以执行字

符串格式的Python 代码。当执行字符串形式的代码时,每次都必须对这些代码进行字节编译处理。

compile()函数提供了一次性字节代码预编译,以后每次调用的时候,都不用编译了。

compile(source, filename, mode[, flags[, dont_inherit]])

第一参数代表了要编译的python 代码。第二个字符串,虽然是必需的,但通常被置为空串。mode参数是个字符串,它用来表明代码对象的类型。有三个可能值:

‘eval‘ 可求值的表达式[和eval()一起使用]

‘single‘ 单一可执行语句[和exec或eval()一起使用]

‘exec‘ 可执行语句组[和exec一起使用]

可求值表达式

>>> eval_code = compile(‘100 + 200‘, ‘‘, ‘eval‘)
>>> eval(eval_code)
300

单一可执行语句

>>> single_code = compile(‘print "Hello world!"‘, ‘‘, ‘single‘)
>>> single_code
<code object <module> at 0xb76ebd10, file "", line 1>
>>> exec single_code
Hello world!
>>> eval(eval_code)
Hello world!

可执行语句组

>>> exec_code = compile("""
... req = input(‘Count how many numbers? ‘)
... for eachNum in range(req):
... print eachNum
... """, ‘‘, ‘exec‘)
>>> exec exec_code
Count how many numbers? 6
0
1
2
3
4
5

2.eval函数

eval()对表达式求值,后者可以为字符串或内建函数complie()创建的预编译代码对象。

eval(source[, globals[, locals]])

第二个和第三个参数,都为可选的,分别代表了全局和局部名字空间中的对象。如果给出这两个参数,globals 必须是个字典,locals可以是任意的映射对象,比如,一个实现了__getitem__()方法的对象。(在2.4 之前,local 必须是一个字典)如果都没给出这两个参数,分别默认为globals()和locals()返回的对象,如果只传入了一个全局字典,那么该字典也作为locals 传入。

>>> eval(‘100 + 200‘)
300

3.exec语句

exec 语句执行代码对象或字符串形式的python 代码。

exec obj

被执行的对象(obj)可以只是原始的字符串,比如单一语句或是语句组,它们也可以预编译成

一个代码对象(分别用‘single‘和‘exec"参数)。

>>> exec """
... x = 0
... print ‘x is currently:‘, x
... while x < 5:
... x += 1
... print ‘incrementing x to:‘, x
... """
x is currently: 0
incrementing x to: 1
incrementing x to: 2
incrementing x to: 3
incrementing x to: 4
incrementing x to: 5

最后, exec 还可以接受有效的python 文件对象。如果我们用上面的多行代码创建一个叫xcount.py 的文件,那么也可以用下面的方法执行相同的代码

>>> f = open(‘xcount.py‘) # open the file
>>> exec f # execute the file
x is currently: 0
incrementing x to: 1
incrementing x to: 2
incrementing x to: 3
incrementing x to: 4
incrementing x to: 5
时间: 2024-08-22 14:45:41

python compile、eval、exec内建函数的相关文章

python中eval, exec, execfile,和compile

eval(str [,globals [,locals ]])函数将字符串str当成有效Python表达式来求值,并返回计算结果. 同样地, exec语句将字符串str当成有效Python代码来执行.提供给exec的代码的名称空间和exec语句的名称空间相同. 最后,execfile(filename [,globals [,locals ]])函数可以用来执行一个文件,看下面的例子: >>> eval('3+4') 7 >>> exec 'a=100' >>

python中eval, exec, execfile,和compile(转载)

此日志为转载,原文链接:http://skandgjxa.blog.163.com/blog/static/1415298201010262403483/ eval(str [,globals [,locals ]])函数将字符串str当成有效Python表 达式来求值,并返回计算结果. 同样地, exec语句将字符串str当成有效Python代码来执行.提供给exec的代码的名称空间和exec语句的名称空间相同. 最后,execfile(filename [,globals [,locals

Python中的eval(),exec()以及其相关函数

1. eval函数 函数的作用: 计算指定表达式的值.也就是说它要执行的Python代码只能是单个运算表达式(注意eval不支持任意形式的赋值操作),而不能是复杂的代码逻辑,这一点和lambda表达式比较相似. 函数定义: eval(expression, globals=None, locals=None) 参数说明: expression:必选参数,可以是字符串,也可以是一个任意的code对象实例(可以通过compile函数创建).如果它是一个字符串,它会被当作一个(使用globals和lo

python中的exec和eval

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

python compile

compile(source, filename, mode[, flags[, dont_inherit]]) 参数source:字符串或者AST(Abstract Syntax Trees)对象. 参数 filename:代码文件名称,如果不是从文件读取代码则传递一些可辨认的值. 参数model:指定编译代码的种类.可以指定为 'exec','eval','single'.如果是exec类型,表示这是一个序列语句,可以进行运行:如果是eval类型,表示这是一个单一的表达式语句,可以用来计算相

Python使用eval强制转换字符串为字典时报错:File &quot;&lt;string&gt;&quot;, line 1, in &lt;module&gt; NameError: name &#39;nan&#39; is not defined

文本中保存的内容为: { 'QQQ': [0.067, 0.167, 0.2, 0.033, 0.233, 0.267, 0.1, 0.133], 'TTT': [0.5, 0.375, 0.25, 0.3, 0.6, 0.333, 0.857, 0.636, 0.667, 0.556] } 用eval转换为字符串时报错: File "test.py", line 43, in d1 data = eval(infile.readline()) File "<strin

python eval, exec. compile

compile 编译某段代码, (将一个字符串编译为字节代码), 以方便重复调用. exec 可以理解为和if, for一样是一个语法声明, 而不是一个函数. 注意globals和locals的含义. refer to: http://www.cnblogs.com/yyds/p/6276746.html 原文地址:https://www.cnblogs.com/qingyuanjushi/p/8401756.html

深度辨析 Python 的 eval() 与 exec()

Python 提供了很多内置的工具函数(Built-in Functions),在最新的 Python 3 官方文档中,它列出了 69 个. 大部分函数是我们经常使用的,例如 print().open() 与 dir(),而有一些函数虽然不常用,但它们在某些场景下,却能发挥出不一般的作用.内置函数们能够被"提拔"出来,这就意味着它们皆有独到之处,有用武之地. 因此,掌握内置函数的用法,就成了我们应该点亮的技能. 在<Python进阶:如何将字符串常量转为变量?>这篇文章中,

Python有用的内置函数divmod,id,sorted,enumerate,input,oct,eval,exec,isinstance,ord,chr,filter,vars,zip

divmod(a, b) 函数接收两个数字类型(非复数)参数,返回一个包含商和余数的元组(a // b, a % b) id() 函数用于获取对象的内存地址. sorted(iterable, key=None, reverse=False) iterable -- 可迭代对象.key -- 用来进行比较的元素,具体的参数取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序. reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)