Python的类型是什么';s代码对象?

Python的类型是什么';s代码对象?,python,compilation,cpython,python-internals,Python,Compilation,Cpython,Python Internals,有没有一种方法可以将由compile或\uuu code\uuu构造的代码对象类型与实际的代码对象类型进行比较 这很好: >>code_obj=compile(“打印('foo')”,“'exec')) >>>代码_obj >>>打印(类型(代码_obj)) 代码 >>>def foo():返回无 >>>类型(foo.\uuuuuuuuuuu代码)=类型(代码\uobj) 真的 但我不能这么做: >>>类型(foo.\uuuu-code\uuu)=代码 NameError:未定义名称“代码”

有没有一种方法可以将由
compile
\uuu code\uuu
构造的代码对象类型与实际的代码对象类型进行比较

这很好:

>>code_obj=compile(“打印('foo')”,“'exec'))
>>>代码_obj
<0x7fb038c1ab70处的代码对象模块,文件“字符串”,第1行>
>>>打印(类型(代码_obj))
代码
>>>def foo():返回无
>>>类型(foo.\uuuuuuuuuuu代码)=类型(代码\uobj)
真的
但我不能这么做:

>>>类型(foo.\uuuu-code\uuu)=代码
NameError:未定义名称“代码”
但是我从哪里导入
code

它似乎不是从哪里来的。它是在CPython中定义的,但是我找不到它的
Python
接口类型。

您在
类型中可以找到它

>>> from types import CodeType
>>> def foo(): pass
... 
>>> type(foo.__code__) == CodeType
True
请注意,关于它,它只在函数
\uuuuucode\uuuuu
上使用
type

因为它位于标准库中,所以即使代码对象的公开方式发生了一些变化,也可以确保它能够工作