【Python 2 到 3 系列】 此整型非彼整型
v2.2 (2.x)以后,python支持不会溢出的 long 型。
v3.0后,确切的讲, int 型(依赖运行环境C编译器中long型的精度)消失了,long型替代 int 型,成为新的、不依赖运行环境的、无精度限制的(只要内存装得下)int型。
举个例子:
==================
>>> a = 2147483647 # 32位机上,v3.0 以前 python 的 int 型能容纳的最大正整数,等同于 sys.maxint。
>>> b = 1
>>> c = a + b # 将导致 int 溢出
==================
v2.2 前会产生 OverflowError 异常。
v2.2 以后 c 会得到预期的值 2147483648,此时,返回值c 已经是一个无精度约束的python long型了。
验证方法:
==================
>>> c
2147483648L
>>> type(a)
<type 'int'>
>>> type(c)
<type 'long'>
==================
v3.0 以后,事实上,不单单c是long型,连a,b都是,因为依赖c编译器long型精度的python int型消失了,long型改名为int型,所有整数天然就是无精度限制的。
验证方法:
==================
>>> c
2147483648
>>> type(a)
<class 'int'>
>>> type(c)
<class 'int'>
==================
引伸:
1. 在无溢出的前提下,无精度限制的整型计算,会不会比有精度限制的整型慢?
答案是肯定的:
==================
# python v2.7
iShort = 2147483647
iLong = 2147483647L # L 表示强制使用long型
for i in range(10000000):
iShort - 1
for i in range(10000000):
iLong - 1
==================
这样简单测试,第二个循环差计算会比第一个耗时多约50%。
但,在v3.0以后,因为没有int型了,所以计算速度应该是long型级别。实际上在v3.0以后,也无法选择精度了,L精度后缀不再支持,默认全部是无精度限制的整型。在v3.2上实际测试可以得到验证,自不赘述。
2. 如果 int 计算比 long 快,long 操作数与 int 操作数混合计算,是不是会快一些?
答案是否定的:
==================
# python v2.7
iShort = 2147483647
iLong = 2147483647L # L 表示强制使用long型
iLong2 = 2147483647L
for i in range(10000000):
iLong - iLong2
for i in range(10000000):
iLong - iShort
==================
这样简单测试,第二个循环差计算会比第一个耗时多约20%。
这种现象的原因不难想象,因为差运算前,python必须把两个操作数精度统一,如果有一个操作数是long,另一个强制转换成long再计算;时间主要消耗在这里。
总结:
所以,在v2.x(x>2)时代,一个提高整型计算速度的小小方法就是,
预先判定操作数精度,如果有可能出现long,全部使用long。
如果没有必要使用long,最好就别定义成long。
尤其不要将两种精度操作数混合运算。
【Python 2 到 3 系列】 此整型非彼整型的更多相关文章
- python基础知识2——基本的数据类型——整型,长整型,浮点型,字符串
磨人的小妖精们啊!终于可以归置下自己的大脑啦,在这里我要把--整型,长整型,浮点型,字符串,列表,元组,字典,集合,这几个知识点特别多的东西,统一的捯饬捯饬,不然一直脑袋里面乱乱的. 对于Python ...
- Python基础:数值(布尔型、整型、长整型、浮点型、复数)
一.概述 Python中的 数值类型(Numeric Types)共有5种:布尔型(bool).整型(int).长整型(long).浮点型(float)和复数(complex). 数值类型支持的主要操 ...
- Python基础:1.数据类型(空、布尔类型、整型、长整型、浮点型、字符串)
提示:python版本2.7,windows系统 Python提供的基本数据类型:空.布尔类型.整型.长整型.浮点型.字符串.列表.元组.字典.日期 1.空(None) None,是一个特殊的值,不能 ...
- Python中从SQL型数据库读写dataframe型数据
Python的pandas包对表格化的数据处理能力很强,而SQL数据库的数据就是以表格的形式储存,因此经常将sql数据库里的数据直接读取为dataframe,分析操作以后再将dataframe存到sq ...
- 整型,长整型,无符号整型等 大端和小端(Big endian and Little endian)
一.大端和小端的问题 对于整型.长整型.无符号整型等数据类型,Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节):而 Little endian ...
- Python猫荐书系列之五:Python高性能编程
稍微关心编程语言的使用趋势的人都知道,最近几年,国内最火的两种语言非 Python 与 Go 莫属,于是,隔三差五就会有人问:这两种语言谁更厉害/好找工作/高工资…… 对于编程语言的争论,就是猿界的生 ...
- Python操作redis学习系列之(集合)set,redis set详解 (六)
# -*- coding: utf-8 -*- import redis r = redis.Redis(host=") 1. Sadd 命令将一个或多个成员元素加入到集合中,已经存在于集合 ...
- 大牛推荐的30本经典编程书籍,从Python到前端全系列。
注:为了方便阅读与收藏,我们也制作了30本书籍完整清单的Markdown.PDF版以及思维导图版,大家可以在实验楼公众号后台回复关键字"书籍推荐"获取. Python 系列(10本 ...
- python 向下取整,向上取整,四舍五入
# python 向下取整 floor 向上取整ceil 四舍五入 round import math num=3.1415926 # 向上取整 print(math.ceil(num)) # 向下取 ...
随机推荐
- 【防火墙】DMZ
DMZ是英文“demilitarized zone”的缩写,中文名称为“隔离区”,也称“非军事化区”.它是为了解决安装防火墙后外部网络的访问用户不能访问内部网络服务器的问题,而设立的一个非安全系统与安 ...
- mysql存储过程中最后有commit和没有commit 是有所不同的。(为测试但是碰到过这个问题)
如果存储过程中没有执行commit,那么spring容器一旦发生了事务回滚,存储过程执行的操作也会回滚.如果存储过程执行了commit,那么数据库自身的事务此时已提交,这时即使在spring容器中托管 ...
- Mautic-2.2.0 (Ubuntu 16.04)
平台: Ubuntu 类型: 虚拟机镜像 软件包: mautic-2.2.0 business intelligence commercial ecommerce mautic open-source ...
- 建立本地yum源
使用环境 服务器处于内网,需要更新 网络资源紧张,节约带宽 建立yum目录 mkdir -p /opt/opmgmt/yum rsync服务器列表 centos mirrors epel mirror ...
- April 21 2017 Week 16 Friday
Courage is like a muscle. We strengthen it with use. 勇气就像肌肉,越使用越强大. Most often it is true, but somet ...
- ARM实验6——ADC实验
实验内容: 编写ADC程序,通过FS4412开发板上的电位器,改变ADC通道输入的电压值,经过ADC转换的值打印到终端. 实验目的: 熟悉开发环境: 掌握猎户座4412处理器ADC模块的使用和编程. ...
- CRM, C4C和Hybris的工作流简介
CRM的例子 Step by Step to debug IC inbox workflow WS14000164 C4C Custom recipient determination in work ...
- 前端高质量知识(一)-JS内存空间详细图解
变量对象与堆内存 var a = 20; var b = 'abc'; var c = true; var d = { m: 20 } 因为JavaScript具有自动垃圾回收机制,所 ...
- 【BZOJ4487】[JSOI2015] 染色问题(高维容斥)
点此看题面 大致题意: 有一个\(n*m\)的矩形,先让你用\(C\)种颜色给它染色.每个格子可染色可不染色,但要求每行每列至少有一个小方格被染色,且每种颜色至少出现一次.求方案数. 高维容斥 显然题 ...
- 找父节点和子节点个数(Poj1634)
题目链接:http://poj.org/problem?id=1634 思路:按照工资从小到大排好,找到最近的那个身高较高的人. 有一点要注意的是,这里有个根节点,大boss,他的id是0,因此,我这 ...