前文对Python的基本类型
进行了简单介绍
在本文中
我们将对数值类型
进行更为详细的认识
闲言不叙,开始在Python中,数字并不是真的只是一种对象类型,而是一组相似类型的分类。Python不仅支持通常的数值类型(整数和浮点数),还提供了字面量来直接创建数字和表达式以处理数字。完整的Python数值类型工具包括:整数和浮点对象
复数对象
小数:固定精度对象
分数:有理数对象
集合:带有数值运算的集合体
布尔值:真和假
内置函数和模块:round、math、random等
表达式;无限制整数精度;位运算;十六进制、八进制和二进制格式
第三方扩展:向量、库、可视化、作图等一.数值字面量1.整数和浮点数整数写成十进制数字的串。浮点数带一个小数点,也可以加上一个科学计数标志e或者E。
代码示例如下:a=12
b=1.2
c=12e-22.十六进制、八进制和二进制字面量(1)十六进制数以0X或者0x开头,后面接十六进制的数字0-9和A-F(大小写都可以)。(2)八进制数以0o或者0O开头,后面接数字0-7构成的数字串。(3)二进制数以0b或者0B开头,后面接二进制数字(0-1)
hex(I)、oct(I)和bin(I)分别把一个十进制整数转换为十六进制、八进制和二进制表示的字符串。代码示例如下:a=12
print(hex(a))
print(oct(a))
print(bin(a))运行结果如下:
0xc
0o14
0b1100使用int(str,base)根据每个给定的进制把一个运行时字符串转换为一个整数。代码示例如下:a=int('12',16)
print(a)运行结果如下:
183.位操作除了一般的数学运算,Python还支持位操作,需要把整数作为二进制位串处理的运算。包括<>、&、|等位操作。第一篇文章写在前面也已经有详细介绍,这里不再赘述。4.复数Python的复数字面量写成实部+虚部的写法,这里的虚部是以j和J结尾。复数还可以通过内置函数complex(real,imag)来创建。
代码示例如下:a=2+3
b=complex(2,3)5.编写其他的数据类型在Python中,需要导入某些模块并调用其函数来创建一些数值类型,如小数和分数。其他他的一些拥有它们自己的字面量语法,如集合。Python的表达式运算符在第一篇文章写在前面已经有详细介绍,这里不再赘述。2.运算符优先级在混合运算中,需要遵循运算符优先级规则。第一篇文章写在前面也已经有详细介绍,这里不再赘述。3.带括号的子表达式子表达式带有括号时,会超越Python的优先级规则。Python总会先行计算圆括号中的表达式,然后再将结果用于整个表达式中。4.混合运算转换Python首先将被操作的对象转换为其中最复杂的操作数的类型,然后再对相同类型的操作数进行数学运算。(Python是这样划分数值类型的复杂度的:整数比浮点数简单,浮点数比复数简单。)5.强制转换类型可以通过手动调用内置函数来强制转换类型。
运行代码如下:a=int(2.4)
b=float(3)
print(a)
print(b)运行结果如下:
2
3.06.运算符重载和多态重载,简单说,就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。如:‘+’可以表示加法或者拼接。
多态,指的是操作的意义由操作对象来决定。重载是多态的具体表现形式,多态是面向对象编程思想的一种特征。7.普通比较和链式比较普通比较:比较操作数的相对大小,返回一个布尔类型的结果。第一篇文章写在前面也已经有详细介绍,这里不再赘述。
链式比较:如表达式(A
真除法:即无论任何类型,最终的浮点数结果都会保留小数部分。2.X//Y(向下取整法)向下取整法:不考虑操作对象的类型,总会省略结果的小数部分,剩下最小的能整除的整数部分。相当于math模块中math.floor函数的功能。四.其他内置工具1.内置函数(无需导入)pow函数:两个参数,第一个参数为底数,第二个参数为指数
abs函数:求绝对值,参数数目不限
round函数:针对操作数进行四舍五入取值。只有一个参数,默认舍弃小数部分;有两个参数,第二个参数表示取值的位数。结果是一个字符串。2.math模块(需要事先导入)math.pi:数学含义里的圆周率,3.141592653589793
math.e:数学含义里的自然数e,2.718281828459045
math.sin函数:求sin值
math.sqrt函数:求根
math.floor函数:向下取整,在(四)已有详细介绍
math.trunc函数:截断取整,在(四)已有详细介绍3.random模块(需要事先导入)random.random函数:随机生成一个浮点数。两个参数表示生成数的范围
random.randint函数:随机生成一个整型数。两个参数表示生成数的范围
random.choice函数:随机打乱一个序列中的元素,并且随机选择一个元素。参数为一个序列
random.shuffle函数:随机打乱一个序列中的元素。参数为一个序列五.其他数值类型1.小数类型创建小数对象:小数对象,正式的名称为Decimal。通过调用已导入模块decimal中的函数来创建小数。功能上和浮点数类似,但是有固定的位数和小数点。因此,小数是精度固定的浮点数
设置全局小数精度:使用getcontext函数来设置小数的精度代码示例如下:from decimal import Decimal
from decimal import getcontext
''' 设置小数精度为4,该精度将全局性地应用到调用线程中创建的所有小数getcontext().prec=4# 创建一个小数对象a'''
a=Decimal('1.14')
b=a/Decimal('7')
print(b)运行结果如下:
0.16292.分数类型分数(Fraction)是Python首次引入的一种新的数值类型,它实现了一个有理数对象。本质上,它显式地保持了一个分子和一个分母,从而避免了浮点数运算的某些不确定性和局限性。分数的创建:Fraction位于模块fractions中,需要导入其构造函数并传入一个人分子和一个分母,从而产生一个分数。
浮点数转换为分数:使用float.as_integer_ratio()将浮点数转换为分数
分数的混用:Fraction+int->FractionFraction+float->floatFraction+Fraction->Fraction代码示例如下:import fractions
# 创建一个分数
a=fractions.Fraction(1,3)
print(a)
#将分数转换为分数
b=(1.5).as_integer_ratio()
print(b)
# 分数混用的格式
c=a+4
print(c)
d=a+1.2
print(d)
e=a+a
print(e)运行结果如下:
1/3
(3, 2)
13/3
1.5333333333333332
2/33.集合集合(set)是一些唯一的、不可变的对象的无序集合体,一个元素只能在集合中出现一次,不管它被添加了多少。集合是其他对象的集合体,兼备列表和字典的某些共有行为。如,集合是可迭代对象,可以按需增长或缩短,并且可以包含多种对象类型。集合可以通过表达式运算符支持一般的数学集合运算。要注意,我们不能对诸如字符串、列表和元组的一般序列使用下面的运算——我们必须将字符串、列表和元组传入set函数,并创建了相关的相应的集合后,才能使用这些工具。
集合set的相关方法。下面展示集合相关的方法。代码示例如下:# 通过字面量直接创建一个集合
x={'h','e','l','l','o'}
# 通过set函数创建一个集合,参数为一个可迭代对象
x=set('hello')
x=set(['h','e','l','l','o'])
print(x)
x=set('hello')
# add函数:新增一个元素到集合;和update函数相比,只能添加一个元素
x.add(2)
print('add函数后结果:',x)
x=set('hello')
# update():更新集合,参数为可迭代对象;和add函数相比,可以添加多个元素
x.update((2,'aa'))
print('update函数后结果:',x)
x=set('hello')
# clear函数:清除集合所有元素
x.clear()
print('clear函数后结果:',x)
x=set('hello')
# copy函数:拷贝整个集合并赋值给变量
y=x.copy()
print('copy函数后结果:',y)
x=set('hello')
# pop函数:随机删除集合中一个元素,可以通过变量来获取删除的元素
x.pop()
print('pop函数后结果:',x)
x=set('hello')
# remove函数:删除集合中指定的元素,如果该集合内没有该元素就报错
x.remove('o')
print('remove函数后结果:',x)
x=set('hello')
# discard函数:删除集合中指定的元素,如果该集合内没有该元素也不会报错
x.discard('l')
print('discard函数后结果:',x)
x=set('hello')
y=set('hexxo')
# intersection & :交集;union | :并集合;difference - :差集
print('intersection函数后结果:',x.intersection(y))
print('union函数后结果:',x.union(y))
print('difference函数后结果:',x.difference(y))
# 使用frozenset定义不可变集合,该函数不可使用add或者pop方法
x=frozenset('hello')
print('frozenset函数创建集合后结果:',x)运行结果如下:
{'e', 'o', 'l', 'h'}
add函数后结果:{2, 'o', 'e', 'l', 'h'}
update函数后结果:{2, 'o', 'aa', 'e', 'l', 'h'}
clear函数后结果:set()
copy函数后结果:{'e', 'o', 'l', 'h'}
pop函数后结果:{'o', 'l', 'h'}
remove函数后结果:{'e', 'l', 'h'}
discard函数后结果:{'e', 'o', 'h'}
intersection函数后结果:{'e', 'o', 'h'}
union函数后结果:{'o', 'e', 'l', 'h', 'x'}
difference函数后结果:{'l'}
frozenset函数创建集合后结果:frozenset({'e', 'o', 'l', 'h'})集合推导集合推导会运行一个循环并在每次迭代时收集一个表达式的结果,通过一个循环变量来访问当前迭代值以用于集合表达式中。其结果就是通过运行代码创建了一个新的集合,它具备所有一般的集合行为。代码示例如下:x=set('hello')
# 通过字面量收集集合推导的元素
y={p for p in x}
# 通过字面量收集集合推导的元素
y=set(p for p in x)
print(y)运行结果如下:
{'l', 'e', 'h', 'o'}4.布尔型Python中有一个名为bool的显式布尔数据类型,带有True和False作为可用且预赋值的内置名称。在内部,名称True和False是bool的实例,而bool实际只是内置整数类型int的子类(从面向对象的角度来看)。True和False的行为与整数1和0是一样的,只不过它们有独特的显示逻辑:他们是作为关键字True和False显示的,而不是数字1和0。5.数值拓展Python有大量的第三方开源拓展可以用来解决更加专门的需求。Numpy,可选的Python拓展提供了高级的数值编程工具,如:矩阵数据类型、向量处理和精密的计算库。【参考书目】:《Python学习手册》