什么是Python代码对象?

时间:2011-04-24 04:44:47

标签: python

在尝试使用Python的“exec”语句时,我收到以下错误:

TypeError: exec: arg 1 must be a string, file, or code object

我不想传入字符串或文件,但是什么是代码对象,我该如何创建呢?

3 个答案:

答案 0 :(得分:31)

创建代码对象的一种方法是使用compile内置函数:

>>> compile('sum([1, 2, 3])', '', 'single')
<code object <module> at 0x19ad730, file "", line 1>
>>> exec compile('sum([1, 2, 3])', '', 'single')
6
>>> compile('print "Hello world"', '', 'exec')
<code object <module> at 0x19add30, file "", line 1>
>>> exec compile('print "Hello world"', '', 'exec')
Hello world

此外,函数具有函数属性__code__(在旧版本中也称为func_code),您可以从中获取函数的代码对象:

>>> def f(s): print s
... 
>>> f.__code__
<code object f at 0x19aa1b0, file "<stdin>", line 1>

答案 1 :(得分:21)

Dan Crosta有一篇很好的博客文章解释了这个主题,包括如何手动创建代码对象,以及如何再次反汇编它们:

  

Exploring Python Code Objects

答案 2 :(得分:16)

代码对象描述为here

  

代码对象代表字节编译   可执行的Python代码,或字节码。   代码对象之间的区别   和一个功能对象是   function对象包含一个显式的   引用函数的全局变量   (定义它的模块),   而代码对象不包含   上下文;也是默认参数   值存储在函数中   对象,而不是代码对象   (因为它们代表了价值观   在运行时计算)。不像   函数对象,代码对象   不可变且不包含引用   (直接或间接)可变的   对象。