Python code objects有什么用途?除了被解释器或调试器使用之外还有其他有用的用法吗?
您是否直接与代码对象进行了互动?如果是,在什么情况下?
答案 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)
如果你想要腌制功能,你可以使用它们。
两个食谱:
http://code.activestate.com/recipes/572213-pickle-the-interactive-interpreter-state/
答案 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运行它,它提供了速度提升的优势,因为您只需将其编译一次到字节代码。