iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python3 整数类型PyLongOb
  • 588
分享到

python3 整数类型PyLongOb

整数类型PyLongOb 2023-01-31 08:01:57 588人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

python3 整数类型PyLonGobject 和PyObject源码分析一 测试环境介绍和准备测试环境:操作系统:windows10python版本:3.7.0 下载地址VS版本:vs2015社区版(免费) 下载地址win10SDK(

python3 整数类型PyLonGobject 和PyObject源码分析
测试环境介绍和准备
测试环境:
操作系统windows10
python版本:3.7.0 下载地址
VS版本:vs2015社区版(免费) 下载地址
win10SDK(安装vs2015是可以选择,如果没有安装则需要独立安装)
Http://FFmpeg.club/Python
二 如何查看源码
1 下载python源码
https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
http://www.ffmpeg.club/python
下载后解压缩
使用vs2015或者vs2017打开
Python-3.7.0\PCbuild\pcbuild.sln 解决方案文件
python3 整数类型PyLongObject 和PyObject源码分析
打开pythoncore项目可以找到\include\object.h文件

三 源码分析
python源码版本 python3.7.0
在python中所有的类型都可以转为PyObject类型,单python用的是C语言,并没有继承机制,我们可以通过源码看它试如何实现的,我们先看PyObject源码
1 PyObject 源码
typedef struct _object {
_PyObject_HEAD_EXTRA
Py_ssize_t ob_refcnt;
struct _typeobject *ob_type;
} PyObject;

python3 整数类型PyLongObject 和PyObject源码分析
1-1 _PyObject_HEAD_EXTRA 源码
我们先看第一个成员是一个宏 _PyObject_HEAD_EXTRA,这个宏是如下定义
#ifdef Py_TRACE_REFS
/ Define pointers to support a doubly-linked list of all live heap objects. /
#define _PyObject_HEAD_EXTRA \
struct _object _ob_next; \
struct _object
_ob_prev;

#define _PyObject_EXTRA_INIT 0, 0,

#else
#define _PyObject_HEAD_EXTRA
#define _PyObject_EXTRA_INIT
#endif
python3 整数类型PyLongObject 和PyObject源码分析

通过代码我们可以看出,它根据环境给_PyObject_HEAD_EXTRA设置的值有可能是空的,或者是一个双向链表。通过编译代码我们知道,他在debug版本的python中是用的双向链表,而在release版本中是空。
1-2 Py_ssize_t ob_refcnt 引用计数
Py_ssize_t 类型在32位程序中就是int,在64位win程序中是__int64
引用计数的策略后面我们专门写文章分析
1-3 struct _typeobject ob_type;
python3 整数类型PyLongObject 和PyObject源码分析
源码比较长,就不全部列出来,这个结构体中包含了一个PyObject对象的所有相关操作函数和属性,比如对象创建和销毁函数,print对象的序列化函数等,存储方式都是通过函数指针。所以每种python类型都会对各类操作函数指针做赋值设定。
其中的PyObject_VAR_HEAD宏内容如下
typedef struct {
PyObject ob_base;
Py_ssize_t ob_size; /
Number of items in variable part */
} PyVarObject;
python3 整数类型PyLongObject 和PyObject源码分析

2 PyLongObject 整数对象

digit
struct _longobject {
PyObject_VAR_HEAD
digit ob_digit[1];
};
python3 整数类型PyLongObject 和PyObject源码分析

2-1 小数预处理
对于比较小的数(-5到257 )直接返回初始化好的值,所以说大量的小整数时,不会新增额外的空间
do if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS) { \
return get_small_int((sdigit)ival); \
} while(0)

python3 整数类型PyLongObject 和PyObject源码分析
2-2 按照数字的发小分配空间,以unsigned short为单位
数字少于16位也就是2个字节的,用一个digit (unsigned short) 存放
python3 整数类型PyLongObject 和PyObject源码分析
数字少于32位也就是4个字节的,用两个个digit (unsigned short) 存放
python3 整数类型PyLongObject 和PyObject源码分析
2-3 大数处理
如果是超大数,就用多个字节存放,由于变量就是一个 unsigned long,先看一下源码:
python3 整数类型PyLongObject 和PyObject源码分析
对于不同的系统,大数能表示的范围不一致,因为数字采用的是unsigned long存放,在不同的系统大小不一致,可以见如下表
python3 整数类型PyLongObject 和PyObject源码分析

其中 windows 64位使用的是 LLP64所以 在window中python数字的最大值也就是4个字节,如果用它来存放64位指针的地址,就会丢失数据。
linuxubuntu16.04 64)使用的是LP64,,所以数字最大值就是8个字节。
相关视频可以观看
python3 整数类型PyLongObject 和PyObject源码分析
http://edu.51cto.com/course/15278.html

--结束END--

本文标题: python3 整数类型PyLongOb

本文链接: https://www.lsjlt.com/news/192614.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python3 整数类型PyLongOb
    python3 整数类型PyLongObject 和PyObject源码分析一 测试环境介绍和准备测试环境:操作系统:windows10Python版本:3.7.0 下载地址VS版本:vs2015社区版(免费) 下载地址win10SDK(...
    99+
    2023-01-31
    整数 类型 PyLongOb
  • 【Python3】基本数据类型-整型(
    整型(int) 在32位机器上,整数的位数为32位,取值范围为-231~231-1,即-2147483648~2147483647 在64位系统上,整数的位数为64位,取值范围为-263~263-1,即-9223372036854775...
    99+
    2023-01-31
    数据类型 整型
  • python3-数据类型
    1.空值空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值2.在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变...
    99+
    2023-01-31
    数据类型
  • Python3的数据类型
      Python提供了强大的内置数据类型,以供程序员使用。除非有特殊原因,我们最好总是使用内置类型作为我们的实现方案。内置的数据对象更快更高效,并且经过了大量的验证,不容易出错。       下面就是Python的内置的数据类型: ...
    99+
    2023-01-30
    数据类型
  • 2.Python3 数据类型
    一、数据类型初识 1、数字2 是一个整数的例子。长整数 不过是大一些的整数。3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表示52.3 * 10-4。(-5+4j)和(2.3-4.6j)是复数的例子,其中...
    99+
    2023-01-31
    数据类型
  • Python3 数据类型-Number
    说明 数据类型是不允许改变的,这就意味着如果改变数字数据类型得值,将重新分配内存空间。以下实例在变量赋值时 Number 对象将被创建: var1 = 1 var2 = 10 使用del语句删除一些数字对象的引用,del语句的语法是: d...
    99+
    2023-01-31
    数据类型 Number
  • Python数据类型 -数值类型(整数,
    一、整数:1)整型(Int) - 通常被称为是整型或整数,是正或负整数,不带小数点。Python3 整型是没有限制大小的,可以当作 Long 类型使用,所以 Python3 没有 Python2 的 Long 类型。如:num01 =100...
    99+
    2023-01-31
    整数 数值 数据类型
  • Python3 基本数据类型
    Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。 等号(=)用来给变量赋值。 等号(=)运算符左...
    99+
    2023-01-30
    数据类型
  • Python3基础数据类型
    Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。等号(=)用来给变量赋值。等号(=)运算符左边是...
    99+
    2023-01-31
    数据类型 基础
  • Python3基本数据类型
    Python3的基本数据类型 变量不需要提前声明 每个变量使用前必须赋值,赋值之后能会被建立 Python中,变量是没有类型的,这里所说的“类型”是指内存中所存储的对像的类型。 Python中有六种标准数据类型 Number (数字) ...
    99+
    2023-01-31
    数据类型
  • python3--基础数据类型
    python基础二(基础数据类型)1.什么是数据  x=10,10是我们要存储的数据2.为何数据要分不同的类型  数据是用来表达状态的,不同的状态就应该用不同的类型数据去表示3.数据类型数字,字符串,列表,元组,字典,集...
    99+
    2023-01-30
    数据类型 基础
  • MySQL数据类型--------整数类型实战
    1. 背景 * MySQL支持SQL标准整数类型整数(或INT)和SMALLINT。作为标准的扩展,MySQL还支持整数类型TINYINT、MEDIUMINT和BIGINT2.  整数类...
    99+
    2022-10-18
  • Python3数据类型及转换
    I. 数据类型 Python3将程序中的任何内容统称为对象(Object),基本的数据类型有数字和字符串等,也可以使用自定义的类(Classes)创建新的类型。 Python3中有六个标准的数据类型: Number(数字) String...
    99+
    2023-01-30
    数据类型
  • Python3基本数据类型之set
    一、定义 set是一个无序且不重复的元素集合。 集合对象是一组无序排列的可哈希的值,集合成员可以做字典中的键。集合支持用in和not in操作符检查成员,由len()内建函数得到集合的基数(大小), 用 for 循环迭代集合的成员。但是因为...
    99+
    2023-01-31
    数据类型 set
  • 【Python3】基本数据类型-列表(
    例: name_list = ['alex', 'seven', 'eric'] 或 name_list = list(['alex', 'seven', 'eric']) 基本操作: 索引 切片 追加 删除 长度 切片 循环 包含 ...
    99+
    2023-01-31
    数据类型 列表
  • 【Python3】基本数据类型-元祖(
    元组(tuple) 元祖为不可被修改的列表,不可变类型 基本操作: 索引 切片 循环 长度 包含 以下为详细介绍 ~ count 查找元素个数 user_tuple = ('xmzncc','asd','fcc') v = user...
    99+
    2023-01-31
    元祖 数据类型
  • 【Python3】基本数据类型-集合(
    集合,不可重复的列表,可变类型 difference s1中存在,s2中不存在 s1 = {'xmzncc','fcc'} s2 = {'alex','wusir'} v = s1.difference(s2) print(v) s2中存...
    99+
    2023-01-31
    数据类型
  • Python3中的bytes类型和str类型
    目录前言:编码发展的历史bytes和str之间的异同前言: Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分。文本总是Unicode,由str类型表示,二进制...
    99+
    2022-11-11
  • python3的异常类型
    BaseException  +-- SystemExit  +-- KeyboardInterrupt  +-- GeneratorExit  +-- Exception       +-- StopIteration       +--...
    99+
    2023-01-31
    异常 类型
  • python3之鸭子类型
    鸭子类型 简单的跟大家聊一聊python中的鸭子类型,通过一个例子来理解就很简单了。 一句话:“当看到一只鸟走起来像鸭子,游泳起来像鸭子,叫起来也想鸭子,那么这只鸟就可以被称为鸭子。”,也就是我并不关心对象什么类型,到底是不是鸭子...
    99+
    2023-01-31
    鸭子 类型
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作