01A05.Learning Python 5th-数值类型

这篇笔记介绍了Python中的数值类型,包括整数、浮点数、复数、小数和分数。在Python 3.X中,整数具有无限精度。浮点数用于表示带有小数的数字。Python还支持复数运算,小数类型解决了浮点数精度问题,而分数类型提供精确的有理数操作。此外,笔记涵盖了位运算、集合、布尔值以及Python数值计算的扩展库如Numpy。
摘要由CSDN通过智能技术生成

本笔记是基于《Python学习手册-原书第五版》第五章 数值类型的个人理解。

对象是一切Python程序的基础,是Python编程中最基本的概念。

Python数值相关的类型有哪些?

1.整数和浮点对象

2.复数对象

3.固定精度对象——小数

4.有理数对象——分数

5.带有数值运算的集合体

6.布尔值——真/假

7.内置函数和模块——round,math,random等

8.表达式——无限制整数精度;位运算;十六进制;八进制;二进制格式

9.第三方扩展:向量,库,可视化

Python 2.X和Python 3.X中整数的区别? 

整数包括正整数,负整数和零。是不带小数的数字。

Python 2.X中有一般整数(32位)和长整数(无限精度)。

Python 3.X中只有整数(无限精度)。

Python中的浮点数是什么?

浮点数是带有小数部分的数字,CPython中采用C语言中的双精度浮点数来实现。

什么是变量?

变量就是名称,用于记录程序中的信息。

变量在第一次赋值时被创建。

变量在表达式中使用时,会被替换成它们存储的值。

变量在表达式使用之前,必须已被赋值。

变量引用对象,而且从不需要事先声明。

整数和浮点数一起运算会发生什么?

整数会先转化为浮点数,然后再一起运算。

比较运算符中的细节。

# 允许整数和浮点数进行比较
>>> 1<2
True
>>> 2.0>=1
True
>>> 2.0 == 2.0
True
>>> 2.0 != 2.0
False

# 链式比较的等价形态
>>> x<y<z
True
>>> x<y and y<z
True
# 链式比较的等价形态
>>> x<y>z
False
>>> x<y and y>z
False
由于and为一假即假,因此只要判断出前一个表达式为假,后面的表达式不运行。


#浮点运算会出现误差
>>> (1.1+2.2) == 3.3
False
>>> 1.1+2.2
3.3000000000000003

Python中有三种风格的除法——经典除法,向下取整除法和真除法。

经典除法是整数/整数=整数。对于出现的小数部分会进行截断处理。在Python2.X版本会出现。例如10/4=2。Python3.X已经不用了。

向下取整数是当出现小数点时,取比该数字小的最大整数。如10/4=2.5→2。

真除法是指无关操作数的类型,都返回包含任何小数部分的一个浮点数结果。

# 真除法 不管运算是什么类型,都返回包含带小数的浮点数。
>>> 10/4
2.5
>>> 12/4
3.0

# 整数法,取比结果小的最大整数,结果向下取整数
>>> 10//4
2
>>> -10//4
-3
>>> -10//-4
2

# 向下取整等价表达式
>>> import math
>>> math.floor(2.5)
2
>>> math.floor(-2.5)
-3

# 截断表达式————舍去小数部分
>>> import math
>>> math.trunc(2.5)
2
>>> math.trunc(-2.5)
-2

复数介绍

复数通常在工程和科学应用程序中使用。用j后缀表示虚数部分。复数允许我们将它的实部和虚部作为属性来访问,并支持所有一般的数学表达式,还可以通过标准的cmath模块中的工具进行处理。

#复数的运算
>>> 1j*1j
(-1+0j)
>>> 2+1j*3
(2+3j)
>>> (2+1j)*3
(6+3j)

十六进制、八进制、二进制的字面量转换

在内存中,同一个整数的值是相同的。

# 八进制表达,前缀0o表达八进制
>>> 0o1,0o20,0o377
(1, 16, 255)

# 十六进制表达,前缀0x表达十六进制
>>> 0x01,0x10,0xff
(1, 16, 255)

# 二进制表达,前缀0b表达二进制
>>> 0b1,0b10000,0b11111111
(1, 16, 255)

# 将数转换为八进制,十六进制和二进制表达的方法
>>> oct(64),hex(64),bin(64)
('0o100', '0x40', '0b1000000')

# 其他进制转换成十进制的另一种方法
>>> int('100',8),int('40',16),int('1000000',2)
(64, 64, 64)

位运算

Python支持C语言中的大多数表达式,包括把整数作为二进制位串处理的运算。

# 向左移动2位 1 * 2**2 = 4  0001 → 0100
>>> 1 << 2
4

# 向右移动2为 4 / 2**2 = 1  0100 → 0001
>>> 4>>2
1

# 或操作 0001|0010 → 0011 or 一真即真(见1为1)
>>> 1|2
3

# 与操作  0001&0010 → 0000 and 一假为假(见0为0)
>>> 1&2
0

常用的数值工具

# 常用的数学数值
>>> import math

>>> math.pi  # π
3.141592653589793

>>> math.e  # 自然对数
2.718281828459045

>>> math.sin(math.radians(90)) # sin(90)
1.0

>>> math.sqrt(144) # 144的平方根
12.0
>>> 144**0.5 # 144的平方根
12.0

>>> pow(2,3) # 2的3次幂
8
>>> 2**3 # 2的3次幂
8

>>> min(3,1,2,4),max(3,1,2,4) #求最小值和最大值
(1, 4)

>>> math.floor(2.567),math.floor(-2.567) #向下取整
(2, -3)

>>> math.trunc(2.567), math.trunc(-2.567) #去除小数取整
(2, -2)
>>> int(2.567),int(-2.567)
(2, -2)


>>> round(2.567,2),round(-2.567,2) #四舍五入
(2.57, -2.57)


>>> import random
>>> random.random() #取随机数
0.1389731374675479
>>> random.randint(1,10) #取1~10范围内随机整数
7

小数类型

为了解决浮点数运算容易出现精度误差的问题,如1.1+2.2 == 3.3返回False。

Python引入了小数Decimal的概念。

从语法上讲,需要通过调用已导入模块中的函数来创建小数;从功能上讲,小数对象很像浮点数,但有固定的位数和小数点——小数是精度固定的浮点数。

# 浮点数运算精度会有误差
>>> 0.1+0.1+0.1-0.3
5.551115123125783e-17

# 使用小数运算
>>> from decimal import Decimal
>>> Decimal('0.1')+Decimal('0.1')+Decimal('0.1')-Decimal('0.3')
Decimal('0.0')
# Decimal会自动转换位数至可用的最高位数
>>> Decimal('0.1')+Decimal('0.1')+Decimal('0.1')-Decimal('0.300')
Decimal('0.000')

# 设置全局小数精度
>>> import decimal
>>> decimal.Decimal('1')/decimal.Decimal('7')
Decimal('0.1428571428571428571428571429')

>>> decimal.getcontext().prec=4 # 设置为四位有效小数

>>> decimal.Decimal('1')/decimal.Decimal('7')
Decimal('0.1429')

分数类型

Fraction——分数可以实现一个有理数对象,显示地保持了一个分子和分母,从而避免了浮点数运算的不精确性和局限性。

#分数表在内存中以对象状态存储
>>> from fractions import Fraction
>>> Fraction(1, 3)
Fraction(1, 3)
>>> print(Fraction(1, 3))
1/3

#分数运算
>>> x = Fraction(1, 2)
>>> y = Fraction(1, 3)
>>> x+y
Fraction(5, 6)
>>> x-y
Fraction(1, 6)
>>> x*y
Fraction(1, 6)
>>> x/y
Fraction(3, 2)

# 分数也可以通过字符串表示的小数来创建
>>> Fraction('0.25')
Fraction(1, 4)

# 分数参与浮点数运算
>>> Fraction(1,4)+0.25
0.5
>>> Fraction(1,3)+0.25
0.5833333333333333

集合

集合是不可变对象的无序合体,集合内的元素具有唯一性。

按照定义,一个元素在集合中只能出现一次,因此在涉及数值和数据库的工作中集合有着广泛的应用。集合常用于过滤重复项,提取列表,字符串及其他可迭代对象中的差异

集合只能包含不可变的(可哈希化的)对象类型,因此字典和列表不能嵌入到集合中。

集合可以嵌入元组来表示日期,记录,IP地址等。

集合也可以包含模块、类型对象等。

由于集合是可变的,所以集合不能嵌入到集合中去。

因为顺序不重要,所以集合可以进行顺序无关的等价性测试。

当你遍历一个图或其他有环结构时,集合可用于记录已访问的位置。

# 创建两个集合
>>> x = set('abcde')
>>> y = set('bdxyz')
>>> x
{'a', 'e', 'd', 'c', 'b'}
>>> y
{'y', 'z', 'd', 'b', 'x'}

# 差集运算,x中有,y中没有的
>>> x-y
{'a', 'e', 'c'}

# 并集运算 or x中有或y中有
>>> x|y
{'a', 'y', 'e', 'z', 'd', 'c', 'b', 'x'}
>>> x.update(y)
>>> x
{'a', 'y', 'e', 'z', 'd', 'c', 'b', 'x'}

# 交集运算 and x中和y中都有的
>>> x&y
{'d', 'b'}
>>> x.intersection(y)
{'d', 'b'}

# 判断元素是否在集合中
>>> 'a' in x
True
>>> 'z' in x
False

# 在集合中增加元素
>>> x.add('p')
>>> x
{'a', 'p', 'e', 'd', 'c', 'b'}

# 在集合中移除元素
>>> x.remove('p')
>>> x
{'a', 'e', 'd', 'c', 'b'}

# 集合可以进行与顺序无关的等价性测试
>>> L1 = [1,2,3,4,5]
>>> L2 = [5,4,3,2,1]
>>> L1 == L2
False
>>> set(L1) == set(L2)
True

布尔型

Python有一个名为bool的显示布尔数据类型,带有True和False作为可用且预赋值的内置名称。

在内部,True和False是bool的实例,bool实际上是int的子类。

# True的类型。type() 不会认为子类是一种父类类型,不考虑继承关系。
>>> type(True)
<class 'bool'>

# isinstance()会认为子类是一种父类类型,考虑继承关系。
>>> isinstance(True, int)
True

# 判断True的值是否等于1
>>> True == 1
True

# 判断True是否是1
>>> True is 1
False

>>> True or False
True
>>> True and False
False

>>> True + 4
5

数值扩展

Numpy库提供了高级的数值编程工具——矩阵数据类型,向量处理和精密的计算库。Python和Numpy的组合可以当做免费且灵活的MATLAB来使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值