Python数据类型深入学习之数字
一. 数字常量
1. 下面来看看Python的数字常量中都要哪些类型:
| 数字 | 常量 |
| 129,-89,0 | 一般整数 |
| 9999848499999L,4594646469l | 长整型数(无限大小) |
| 1.232,3.14e-10,4E203,3.0e+210 | 浮点数 |
| 0177,x9ff,0XFF | 整数的八进制和十六进制数 |
| 2+5j,2.0+6.0j,3J | 复数常量 |
这里需要注意的是:如果整数常量以l或L结尾,那么它就变成了Python的长整型数。当一个整数的值超过32位时,它会自动变换为长整型数,不需要自己输入字母L。八进制数以数字0开头,后面接数字0-7构成的字符串。十六进制数以0x或0X开头,后面接十六进制的数字0-9和A-F。十六进制中的字符是不区分大小写的!
2. 内置数学工具和扩展(用于处理数字对象的工具)
(1)操作符如下表所示:

注意:在Python的新版本中x<>y的用法已经被取消,目前只能用x!=y
(2)操作符的优先级
在上图中越靠后的操作符优先级越高。
(3)混合类型的数字运算时自动升级
意思就是,当两个不同类型的数字进行运算时,Python首先会将被操作的对象转换成其中最复杂的操作对象,然后在进行同类型的对象运算。因此,Python有划分数字类型复杂度的准则:整型<长整型<浮点数<复数
注意:整数和浮点数的除法运算是不一样的,例子如下:

(4)除法:传统除法,Floor除法,真除法
①X / Y 传统除法,在Python2.7版本中后之前的版本中,这个除法对整数相除得到的结果会省去小数部分,对于浮点数会保留小数部分。但是在3.0版本之后就变成了真除法(无论任何类型都会保留小数部分)


②X // Y Floor除法,不考虑操作对象的类型,总会省略结果的小数部分。不论是2.0版本还是3.0版本
3. 位操作
Python的另一个特点是,也支持像C语言中的大多数数学表达式,比如实现位移和布尔操作等。

上面的二进制1左移了两位,成为二进制4,由0001---->0100
4. 长整型数 在Python中,一个长整型数可以任意大
5. 八进制和十六进制数 Python中有一些内置函数支持十进制与八进制和十六进制之间的相互转换
oct()函数:十进制---->八进制
hex()函数:十进制---->十六进制
int()函数:可以将一个数字字符串(指八进制或十六进制数)转化为整数。int('0100') -->100,int('0100', 8) -->64,int('0x40', 16) -->64
6. 常用的数学工具:math模块,random模块,内置函数int(),round()等。这里需要注意的是:在使用之前,模块必须导入,内置函数不用。
7. 小数数字 小数对象跟浮点数不同,但是有共同之处:都有固定的精度。然而浮点数对象的数学运算在精度方面有缺陷,比如当计算0.1+0.1+01-0.3的时候,结果应该为0,然而并不是:

对于小数对象可以更正结果:

另外decimal中context对象可以设置小数精度:

8. 布尔型
在Python中布尔型比较特殊,首先它的值为True 和 False。 注意这里的首字母必须大写,不然会报错!!这是区别于其他语言的地方。并且在Python中True 可以作为数字1参与数学运算。

9. 动态类型介绍
在执行a = 3 这行程序时,我们并没有声明变量的类型,Python内部都做了什么工作呢?
(1) 创建一个对象来代表值3
(2) 创建一个变量a,如果它还没有被创建的话
(3) 将变量与新的对象相连接

通过上图可以看出变量和对象是保存在内存中的不同部分,并通过连接相关联。变量总是连接到对象,绝对不会连接到其他变量上。在内部事实上是到对象内存空间的一个指针,在Python中从变量到对象的连接称作引用。即引用是一种关系,以内存中的指针的形式实现。一旦变量被使用,Python自动跟随这个变量到对象的连接。
(4) 对象的垃圾收集
每当一个变量名被赋予了一个新的对象,之前的对象占用的空间就会被回收(如果它没有被其他的变量名或对象引用的话)。这种自动回收对象空间的技术称作垃圾收集。当变量被赋予一个新的对象时,它的前一个对象的空间会被回收,并且对象的空间自动放入自由内存空间池,等待后来的对象使用。
(5) 共享引用

这里变量a和b都引用了相同的对象(也就是说,指向了相同的内存空间)。在Python中称作共享引用。
下面看这个引用:

这个引用结构如下:

看下面的赋值语句:

注意一点,对象的引用值在此过程中逐个丢弃,每一次x被赋值给一个新的对象,Python都回收了对象的空间,在Python内部,通过保持用每个对象中的计数器记录引用 到这个对象上的 次数来完成这一功能。一旦这个计数器被设置为零,这个对象的内存空间就会自动回收。像上图中的赋值过程,每次x被赋值给一个新的对象,前一个对象的引用计数器变为零,导致它的空间被回收。
(6) 共享引用和在原处修改
所谓在原处修改,是指具有可变性的数据对象,比如列表。下面看这样的操作:

修改L1的第一个元素,对L1对象产生了影响,L2和L1引用的是同一对象,因此L2也发生了变化。那么怎么才能在修改L1的时候,不对L2产生影响呢?这就用到了Python的拷贝对象,而不是创建引用。能进行拷贝的方法很多,比如copy模块,内置列表函数(分片操作)。分片是最常用的.

(7) 共享引用和相等
在Python中,对于小的整数和小的字符串,可能并没有被回收;相反的,它将可能被保存在一个系统表中(缓存机制)。由于Python的引用模型,在Python中有两种不同的方法判断是否相等:
① == 操作符: 测试两个被引用的对象是否具有相同的值;
② is 操作符:检查两个变量是否指向同一个对象。如果相同,返回True,否则False。实质上is是比较实现引用的指针。
举例如下:

再看小的数字的情况:

为什么这里的is的结果是True呢?因为小的数字和字符串被缓存和复用了!
注意:Python中提供了可以查询对象被引用次数的函数:sys.getrefcount(对象名)

Python数据类型深入学习之数字的更多相关文章
- python数据类型之Number(数字)
一.Number(数字) 关注公众号"轻松学编程"了解更多. 数据类型 为什么会有不同的数据类型? 计算机是用来做数学计算的机器,因此它可以处理各种数值,但是计算机能够处理 ...
- Python数据类型深入学习之字符串
一. Python字符串 1. 下面来看一下python中常见字符串常量和表达式: Python中用来编写字符串的方法有以下几种: (1) 单引号:'speade' (2) 双引号:"spe ...
- python数据类型分类以及运算类型
一.python数据类型 目录: 1.数字(整数.小数) 2.字符串(单引号.双引号.三引号) 3.元组 #元素确定之后不能修改 4.列表 #元素可以修改 5.集合 #不讲顺序,得到的结果没有重复元 ...
- Python学习笔记(五)--Python数据类型-数字及字符串
Python数据类型:123和'123'一样吗?>>> 123=='123'False>>> type(123)<type 'int'>>> ...
- PYTHON 100days学习笔记007-2:python数据类型补充(2)
目录 day007:python数据类型补充(2) 1.Python3 元组 1.1 访问元组 1.2 删除元组 1.3 元组运算符 1.4 元组索引,截取 1.5 元组内置函数 2.python3 ...
- PYTHON 100days学习笔记007-1:python数据类型补充(1)
目录 day007:python数据类型补充(1) 1.数字Number 1.1 Python 数字类型转换 1.2 Python 数字运算 1.3 数学函数 1.4 随机数函数 1.5 三角函数 1 ...
- 【转】Python数据类型之“数字(numerics)”
[转]Python数据类型之“数字(numerics)” 上一节内容说的是“Python基本语法”,本节主要讲下Python中的数据类型. 存储在内存中的数据通常有两个属性: 在内存中的存放位置:这个 ...
- Python数据类型(数字)
文章内容参考了教程:http://www.runoob.com/python/python-basic-syntax.html#commentform Python 变量类型 变量存储在内存中的值.这 ...
- python3笔记八:python数据类型-Number数字
一:学习内容 数字类型分类:整数.浮点数.复数.布尔值 数字类型转换 数字类型的数学功能:abs().max().min().pow().round().math函数.random函数 二:数字类型分 ...
随机推荐
- 10.2-uC/OS-III内部任务管理(任务状态)
1.任务状态 从用户的观点来看,任务可以是有 5种状态,见图 5-6.展示了任务状态间的转换关系. {休眠状态,就绪状态,运行状态,挂起状态,中断状态} (1).处于休眠状态的任务驻留于内存但未被uC ...
- 【Loadrunner】Loadrnner 参数化策略
Loadrnner 参数化策略 参数化策略 关键:类型+数据+策略 1.Select next row ( 如何取) 选择下一行 1)Sequential:顺序的 每个VU都从第一行开始,顺序依次向下 ...
- LeetCode-188.Best Time to Buy and Sell Stock IV
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- windows版mysql5.7.18安装
windows版mysql5.7.18安装 初始化命令:C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld.exe --defaults-file=& ...
- Pycharm快捷键大全(windows + Mac)
Windows快捷键 1.编辑 Ctrl + Space 基本的代码完成(类.方法.属性) Ctrl + Alt + Space 快速导入任意类 Ctrl + Shift + Enter ...
- linux服务器性能查看
1.1 cpu性能查看 1.查看物理cpu个数: cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l 2.查看每个物理cpu ...
- 万恶之源 - Python装饰器及内置函数
装饰器 听名字应该知道这是一个装饰的东西,我们今天就来讲解一下装饰器,有的铁子们应该听说,有的没有听说过.没有关系我告诉你们这是一个很神奇的东西 这个有多神奇呢? 我们先来复习一下闭包 def fun ...
- (转)Ctrl+H 浪潮Raid配置文档
说明 本手册适用于LSI芯片Raid卡 包括但不限于Inspur 2008/2108 Raid卡.LSI 9240/9260/9261/9271 等Raid卡. 不同型号的Raid卡在某些功能上的支持 ...
- Linux开启root用户
1.进入系统的时候Ctrl + Alt + F1,切换到命令窗口,登录现有用户: 2.执行sudo passwd root + root的密码: 3.按照要求输入密码: ==> root用户密码 ...
- 使用spring的aop对Struts2的Action拦截后出现依赖注入为空问题
两种解决方案: 1.action类继承ActionSupport了后,出现依赖注入为空,要在applicationContext.xml配置中加入:<aop:aspectj-autoproxy ...