2. Python3源码—浮点对象

作者: 阿里云云栖号 | 来源:发表于2018-06-06 13:44 被阅读93次

2.1. 浮点对象

浮点对象是“定长对象”。

2.1.1. Python中的创建

Python中浮点对象创建最重要的方法为PyFloat_FromDouble,如下Python语句最终会调用到PyFloat_FromDouble:

2.1.2. PyFloat_FromDouble的C调用栈

词法解析,最终调到PyFloat_FromDouble,调用顺序如下:

2.1.3. PyFloat_FromDouble的C源码

可以看到:

浮点对象的C数据结构,所以Python中的浮点对象,实际上是C中的double。

采用浮点对象缓冲池

float_dealloc和PyFloat_FromDouble方法针对free_list和numfree的操作构成了Python的浮点对象缓冲池技术。采用链表,值得注意的是Py_TYPE(op),在此处被当做next指针。缓冲池大小有上限,Python3中为100。

PyObject_INIT

因为是定长对象,所以调用PyObject_INIT方法,与PyObject_INIT_VAR方法相比,只是少调用Py_SIZE(op) = (size)

2.2. 浮点对象的特性

2.2.1. 数值计算

浮点对象的数值计算由float_as_number定义:

2.2.2. to string

2.2.3. hash

2.2.4. 比较

2.2.5. 内置方法

2.2.6. 内置属性

2.3 参考

 Python源码剖析 

本文作者:whj0709

阅读原文

本文为云栖社区原创内容,未经允许不得转载。

相关文章

网友评论

本文标题:2. Python3源码—浮点对象

本文链接:https://www.haomeiwen.com/subject/fisbsftx.html