一. 数字常量

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数据类型深入学习之数字的更多相关文章

  1. python数据类型之Number(数字)

    一.Number(数字) 关注公众号"轻松学编程"了解更多. 数据类型 ​ 为什么会有不同的数据类型? ​ 计算机是用来做数学计算的机器,因此它可以处理各种数值,但是计算机能够处理 ...

  2. Python数据类型深入学习之字符串

    一. Python字符串 1. 下面来看一下python中常见字符串常量和表达式: Python中用来编写字符串的方法有以下几种: (1) 单引号:'speade' (2) 双引号:"spe ...

  3. python数据类型分类以及运算类型

    一.python数据类型 目录: 1.数字(整数.小数) 2.字符串(单引号.双引号.三引号) 3.元组 #元素确定之后不能修改 4.列表 #元素可以修改 5.集合  #不讲顺序,得到的结果没有重复元 ...

  4. Python学习笔记(五)--Python数据类型-数字及字符串

    Python数据类型:123和'123'一样吗?>>> 123=='123'False>>> type(123)<type 'int'>>> ...

  5. PYTHON 100days学习笔记007-2:python数据类型补充(2)

    目录 day007:python数据类型补充(2) 1.Python3 元组 1.1 访问元组 1.2 删除元组 1.3 元组运算符 1.4 元组索引,截取 1.5 元组内置函数 2.python3 ...

  6. PYTHON 100days学习笔记007-1:python数据类型补充(1)

    目录 day007:python数据类型补充(1) 1.数字Number 1.1 Python 数字类型转换 1.2 Python 数字运算 1.3 数学函数 1.4 随机数函数 1.5 三角函数 1 ...

  7. 【转】Python数据类型之“数字(numerics)”

    [转]Python数据类型之“数字(numerics)” 上一节内容说的是“Python基本语法”,本节主要讲下Python中的数据类型. 存储在内存中的数据通常有两个属性: 在内存中的存放位置:这个 ...

  8. Python数据类型(数字)

    文章内容参考了教程:http://www.runoob.com/python/python-basic-syntax.html#commentform Python 变量类型 变量存储在内存中的值.这 ...

  9. python3笔记八:python数据类型-Number数字

    一:学习内容 数字类型分类:整数.浮点数.复数.布尔值 数字类型转换 数字类型的数学功能:abs().max().min().pow().round().math函数.random函数 二:数字类型分 ...

随机推荐

  1. SpringBoot-热部署Devtools

    热部署 什么是热部署 所谓的热部署:比如项目的热部署,就是在应用程序在不停止的情况下,实现新的部署 项目演示案例 @RestController @Slf4j public class IndexCo ...

  2. 如何快速REPAIR TABLE

    早上到公司,刚准备吃早餐,手机响了,一看是服务器自动重启了.好吧,准备修复数据吧.游戏服的游戏日志使用的是MyISAM.众所周知,MyISAM表在服务器意外宕机或者mysqld进程挂掉以后,MyISA ...

  3. InnoDB启用大内存页

    在 Linux 操作系统上运行内存需求量较大的应用程序时,由于其采用的默认页面大小为 4KB,因而将会产生较多 TLB Miss 和缺页中断,从而大大影响应用程序的性能.当操作系统以 2MB 甚至更大 ...

  4. 报错解决——make: *** No targets specified and no makefile found. Stop

    wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.6.tar.gz tar zxvf ncurses-5.6.tar.gz #切换目录到ncurses ...

  5. Python3学习之路~6.2 实例演示面向对象编程的好处

    首先建一个dog类,实例化为3个dog对象,并让它们都叫. class Dog: def bulk(self): print("xiaohuang:wang wang wang !" ...

  6. nginx 部署web页面问题

    nginx 部署web页面的时候,路径都是对的,但是css文件就是不起作用,控制台提示如下,原来是格式的问题,截图如下: css 被转成了application/octet-stream,这个是ngi ...

  7. PinyinUtil

    import java.util.HashSet;import java.util.Set;import java.util.regex.Matcher;import java.util.regex. ...

  8. Learn golang: Top 30 Go Tutorials for Programmers Of All Levels

    https://stackify.com/learn-go-tutorials/ What is Go Programming Language? Go, developed by Google in ...

  9. 10.25 AITalkUat部署

    准备: git clone AITalkUat工程,在本地跑: 可以直接浏览器访问127.0.0.1:5000() 如果带上参数,可以得到访问的结果127.0.0.1:5000/autoservice ...

  10. U盘复制文件到最后5秒会卡住怎么办解决

    现在的U盘容量已经非常大了,一般都有16G以上,为了能放单文件大于4G的数据大多数时候我们都是把U盘格式化为ntfs格式的,所以会出现不管是大文件还是小文件,当你往U盘里复制文件或者使用发送到U盘功能 ...