Python代码对象 - 它们用于什么?

时间:2011-02-21 20:50:05

标签: python types internals

Python code objects有什么用途?除了被解释器或调试器使用之外还有其他有用的用法吗?

您是否直接与代码对象进行了互动?如果是,在什么情况下?

3 个答案:

答案 0 :(得分:8)

代码对象的主要用途是将函数(代码)的静态部分与动态部分(函数)分开。代码对象是存储在.pyc文件中的东西,在编译代码时创建;声明函数时,在运行时从它们创建函数对象。它们暴露在调试器反射中,通常不需要直接使用。

支持闭包的所有语言都有类似的东西;他们并不总是像Python一样接触这种语言,而Python比大多数语言都有更全面的反映。

您可以使用代码对象通过types.FunctionType实例化函数对象,但这很少有任何实际用途 - 换句话说,不要这样做:

def func(a=1):
    print a

func2 = types.FunctionType(func.func_code, globals(), 'func2', (2,))
func2()
# 2

答案 1 :(得分:3)

答案 2 :(得分:1)

当您使用内置compile function时,它将返回一个代码对象,如下所示:

>>> c = compile("print 'Hello world'", "string", "exec")
<code object <module> at 0xb732a4e8, file "string", line 1>
>>> exec(c)
Hello world
>>> 

就个人而言,我在支持不同插件脚本的应用程序中使用过这个:我只是从文件中读取插件,将其传递给编译函数,然后在需要时使用exec运行它,它提供了速度提升的优势,因为您只需将其编译一次到字节代码。