我知道python的大部分都是用C语言实现的,我想知道python在底层是如何工作的(根据它在C语言中的实现),当涉及到确定它是什么类型的变量时,在本例中,让我们说x=5
,如果检查x的类型,它会说class int,但是在C语言中是如何实现的呢? 在引擎盖下进行哪些检查以确定它属于int类
Python绝不是“类型自由”的(请参见“是否为强类型的Python?”)。 所有Python对象都有一个特定的类型,该类型决定了它们的许多属性和行为。 对于那些表示为文字的,其类型由它们的词法形式决定。 对于其他对象,则由它们的计算方式决定。
Python不具备的是类型声明或任何其他限制或预先确定变量或聚合可能包含的对象类型的内置形式。 因此,谈论变量的类型(例如x
)是没有意义的,而只谈论它所包含的值的类型是没有意义的。 这就是type()
函数(例如)计算的内容。 所以当你问
当涉及到确定变量类型时,python是如何工作的(根据它在C语言中的实现)
从某种意义上说,答案很简单:Python根本不这样做。 变量没有类型--只有它们的值才有。 当您调用type(x)
时,您并不确定变量的类型,而是确定其当前值的类型。
Python通过确保每个Python对象(例如由文本5
表示的对象)包含相当多的数据来支持这一点。 值得注意的是,它包含有关对象的值和类型的信息,但也包含各种其他细节,例如引用计数等等。 对于SO答案来说,这些细节过于宽泛,但您可以在Python/C API参考手册中找到其中的许多内容。 要了解最深刻和最私密的秘密,您需要研究cpython头和源代码。
这是一个巨大的课题。
下面的文件会给你更多的了解。
https://intopythoncom.files.wordpress.com/2017/04/internalsofcpython3-6-1.pdf
正如您所说的,整数类型的一个简单示例
为了保存整数类型的对象,C中定义了如下结构
typedef struct {
PyObject_HEAD
long ob_ival;
} PyIntObject;
C结构的对象pyintobject
(上述文档的7.5节)保存整数类型的对象。
如果您更感兴趣,请按照上述文件第7.5节中所述设置环境和调试。
Objects/intobject.c,并在第89行上放置一个调试点。 开始调试应用程序。
对于要表示的类型,PyTypeObject处于较高级别。 (参阅上述文件第7.3节)
作为一名程序员,了解其内部机制是一件很好奇的事情。 但是不要花太多时间去理解,除非你是在解释器级别工作。