数值类型基础知识
完整的python数值类型的工具包括:
- 整数和浮点数;
- 复数对象;
- 小数:固定进度对象;
- 分数:有理数对象;
- 集合:带有数值计算的集合体;
- 布尔值:真和假;
- 内置函数和模块;
- 表达式;
- 第三方扩展;
数值字面量
- 整数和浮点数字面量:
整数写成十进制数字串。浮点数带一个小数点,也可以加上一个科学计数标识e或E。 - python3整数:
在python3中,没有一般整数和长整型之分,只有一种整数类型。 - 十六进制、八进制和二进制字面量:
十六进制:以0x或0X开头,后面接0-9和A-F;
八进制:以0o或0O开头,后面接0-8;
二进制:以0b或0B开头,后面接0-1;
内置函数hex(I)、oct(I)和bin(I)把一个整数转换为十六进制、八进制和二进制。并且int(str, base)根据每个给定的进制把一个运行时字符串转换为一个整数; - 复数:
复数的实现字面量写成实部+虚部的写法(A+Bj 或 A+BJ),也可以通过内置函数complex(real, imag)来创建;
内置数值工具
- 表达式运算工具:+、-、*、/、>>、**、&
- 内置数学函数:pow、abs、round、int、hex、bin
- 工具模块:random、math
表达式运算符
算数运算符
算数运算符 | 描述 |
---|---|
+ | 加 - 两个对象相加 |
- | 减 - 得到负数或是一个数减去另一个数 |
* | 乘 - 两个数相乘或是返回一个被重复若干次的字符串 |
/ | 除 |
% | 取模 |
** | 幂 |
// | 向下取接近除数的整数 |
比较运算符
比较运算符 | 描述 |
---|---|
== | 等于 - 比较对象是否相等 (a == b) |
!= | 不等于 - 比较两个对象是否不相等 (a != b) |
> | 大于 - 返回x是否大于y (a > b) |
< | 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 |
>= | 大于等于 |
<= | 小于等于 |
赋值运算符
赋值运算符 | 描述 |
---|---|
= | 简单的赋值运算符 |
+= | 加法赋值运算符 |
-= | 减法赋值运算符 |
*= | 乘法赋值运算符 |
/= | 除法赋值运算符 |
%= | 取模赋值运算符 |
**= | 幂赋值运算符 |
//= | 取整除赋值运算符 |
:= | 海象运算符,可在表达式内部为变量赋值。Python3.8 版本新增运算符。 |
位运算符
赋值运算符 | 描述 |
---|---|
& | 按位与运算符 |
按位或运算符 | |
^ | 按位异或运算符 |
~ | 按位取反运算符 |
<< | 左移动运算符 |
>> | 右移动运算符 |
逻辑运算符
赋值运算符 | 描述 |
---|---|
and | 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值 |
or | 布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值 |
not | 布尔"非" - 如果 x 为 True,返回 False |
成员运算符
赋值运算符 | 描述 |
---|---|
in | 如果在指定的序列中找到值返回 True,否则返回 False |
not in | 如果在指定的序列中没有找到值返回 True,否则返回 False |
身份运算符
赋值运算符 | 描述 |
---|---|
is | is 是判断两个标识符是不是引用自一个对象 x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False |
is not | is not 是判断两个标识符是不是引用自不同对象 |
混合运算遵循运算符优先级
赋值运算符 | 描述 |
---|---|
** | 指数 (最高优先级) |
~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
* / % // | 乘,除,求余数和取整除 |
+ - | 加法减法 |
>> << | 右移,左移运算符 |
& | 位 ‘AND’ |
^ | |
<= < > >= | 比较运算符 |
== != | 等于运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not and or | 逻辑运算符 |
括号分组子表达式
python总会先计算圆括号的表达式式,然后再将结果用于整个表达式中
混合类型向上转换
python是这样划分数值类型的复杂度的:整数比浮点数简单,浮点数比复数简单。因此当一个整数与浮点数混合时,整数会首先升级为浮点数的值,之后通过浮点数的运算法则得到浮点数的结果;
可以使用内置函数来强制转换类型:
int(float) # 将浮点数转换为整数
float(int) # 将整数转换为浮点数
数字的实际应用
变量与基础表达式
在python中变量就是名称,可以用于记录程序中的信息:
- 变量在第一次赋值时被创建;
- 变量在表达式中使用时,会被替换成它们的值;
- 变量在表达式中使用之前,必须已被赋值;
- 变量引用对象,而且从不需要事先声明;
普通比较和链式比较
比较表达式可以时两个数之间进行比较(a<b),也可以同时多个数之间比较(a<b<c、a<b and c<d)
除法
X/Y:在python3中表示的是真除法;
X//Y:向下取整,向下取整也叫做截断除法,结果的数据类型总是依赖于操作数的类型,如果操作数中有一个是浮点数,结果就是浮点数
十六进制、八进制和二进制:字面量于转换
这些字面量只是一个整数对象的值的一种替代方式
>>> 0o1,0o20,0o377
(1, 16, 255)
>>> 0x01,0x10,0xFF
(1, 16, 255)
>>> 0b1,0b10000,0b11111111
(1, 16, 255)
python默认用十进制显示整数值,但它提供了内置函数,能帮我们把整数转换为其他进制数数字字符串
>>> oct(64),hex(64),bin(64)
('0o100', '0x40', '0b1000000')
使用int(str, base)函数,可以将一个数字的字符串转换为一个整数,并通过可选的第二位参数来确定转换后的数字的进制。
>>> int('100', 16), int('40', 8), int('1000000', 2)
(256, 32, 64)
其他内置数值工具
数学函数
函数 | 返回值 |
---|---|
abs(x) | 返回数字的绝对值,如abs(-10) 返回 10 |
ceil(x) | 返回数字的上入整数,如math.ceil(4.1) 返回 5 |
cmp(x, y) | 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。 Python 3 已废弃,使用 (x>y)-(x<y) 替换。 |
exp(x) | 返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045 |
fabs(x) | 返回数字的绝对值,如math.fabs(-10) 返回10.0 |
floor(x) | 返回数字的下舍整数,如math.floor(4.9)返回 4 |
log(x) | 如math.log(math.e)返回1.0,math.log(100,10)返回2.0 |
log10(x) | 返回以10为基数的x的对数,如math.log10(100)返回 2.0 |
max(x1, x2,…) | 返回给定参数的最大值,参数可以为序列。 |
min(x1, x2,…) | 返回给定参数的最小值,参数可以为序列。 |
modf(x) | 返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。 |
pow(x, y) | x**y 运算后的值。 |
round(x [,n]) | 返回浮点数 x 的四舍五入值,如给出 n 值,则代表舍入到小数点后的位数。其实准确的说是保留值将保留到离上一位更近的一端。 |
sqrt(x) | 返回数字x的平方根。 |
随机数函数
函数 | 返回值 |
---|---|
choice(seq) | 从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。 |
randrange ([start,] stop [,step]) | 从指定范围内,按指定基数递增的集合中获取一个随机数,基数默认值为 1 |
random() | 随机生成下一个实数,它在[0,1)范围内。 |
seed([x]) | 改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。 |
shuffle(lst) | 将序列的所有元素随机排序 |
uniform(x, y) | 随机生成下一个实数,它在[x,y]范围内。 |
三角函数
函数 | 返回值 |
---|---|
acos(x) | 返回x的反余弦弧度值。 |
asin(x) | 返回x的反正弦弧度值。 |
atan(x) | 返回x的反正切弧度值。 |
atan2(y, x) | 返回给定的 X 及 Y 坐标值的反正切值。 |
cos(x) | 返回x的弧度的余弦值。 |
hypot(x, y) | 返回欧几里德范数 sqrt(xx + yy)。 |
sin(x) | 返回的x弧度的正弦值。 |
tan(x) | 返回x弧度的正切值。 |
degrees(x) | 将弧度转换为角度,如degrees(math.pi/2) , 返回90.0 |
radians(x) | 将角度转换为弧度 |
数学常数
常数 | 描述 |
---|---|
pi | 数学常量 pi(圆周率,一般以π来表示) |
e | 数学常量 e,e即自然常数(自然常数) |
其他数值类型
小数类型
小数对象,其正式的名称是Decimal。从语法上讲,创建小数可以通过导入内置模块中的函数来创建小数,而不是通过运行字面量表达式来创建。从功能上讲,小数对象和浮点数很想,但小数由固定的精度和小数点。因此小数是精度固定的浮点数。
小数基础知识
浮点数运算缺乏精确度,这是因为用来存储数值的空间有限,在一些计算中会出现意想不到的结果,下面的例子应该的得到的结果是0,但是得到的结果并不是我们想得到的;
>>> 0.1+0.1+0.1-0.3
5.551115123125783e-17
虽然打印结果将会产生一个用户友好的显示格式,但不能完全解决问题,因为与硬件相关的浮点数运算在准确度方面有着内在的缺陷;
>>> print(0.1+0.1+0.1-0.3)
5.551115123125783e-17
但是使用小数可以使得结果更加精确;
>>> Decimal('0.1')+Decimal('0.1')+Decimal('0.1')-Decimal('0.3')
Decimal('0.0')
设置全局小数精度
>>> import decimal
>>> decimal.Decimal(1)/decimal.Decimal(7)
Decimal('0.1428571428571428571428571429')
>>>
>>> decimal.getcontext().prec = 4 # 设置小数点后的位数
>>> decimal.Decimal(1)/decimal.Decimal(7)
Decimal('0.1429')
分数类型
引入分数的数值对象,它实现了一个有理数对象。它显示地保持一个分子和一个分母,从而避免了浮点数运算的某些不精确性和局限性。
分数基础知识
分时和小数一样,都可以用来处理浮点数类型的数值不精确的问题。同时也需要导入模块;
>>> from fractions import Fraction
>>> x = Fraction(1, 3)
>>> y = Fraction(4, 6)
>>>
>>> x
Fraction(1, 3)
>>> y
Fraction(2, 3)
>>> print(y)
2/3
>>> x + y
Fraction(1, 1)
分数转换和混用类型
>>> (2.5).as_integer_ratio()
(5, 2)
>>>
>>> f = 2.5
>>> z = Fraction(*f.as_integer_ratio())
>>> z
Fraction(5, 2)
>>>
>>> x
Fraction(1, 3)
>>>
>>> x + z
Fraction(17, 6)
>>> float(x)
0.3333333333333333
>>> float(z)
2.5
>>>
>>> Fraction.from_float(1.75)
Fraction(7, 4)
>>> Fraction(*(1.75).as_integer_ratio())
Fraction(7, 4)
集合
集合是唯一的、不可变的对象的无序集合体,这些对象支持与数字集合理论相对应地操作。一个元素在集合中只能出现一次;
集合是可迭代对象,可以按需增长或缩短,并且可以包含多种对象类型;
集合基础知识
集合基本上就像是无值的字典,集合的项是无序的、唯一的、不可改变的;
创建一个集合对象,可以使用内置的set函数传入一个序列或其他可迭代对象:
>>> x = set('abcd')
>>> x
{'b', 'd', 'a', 'c'}
>>> y = set([1, 2, 3, 4])
>>> y
{1, 2, 3, 4}
集合的基本操作
添加元素
s.add( x )
s.update( x )
>>> s = set('abc')
>>> s
{'b', 'a', 'c'}
>>> s.add('1')
>>> s
{'1', 'b', 'a', 'c'}
>>> s.update('2')
>>> s
{'1', 'a', 'b', 'c', '2'}
删除元素
s.remove( x )
s.discard( x )
s.pop() # 随机从集合中删除一个元素,并返回该元素
>>> s
{'1', 'a', 'b', 'c', '2'}
>>> s.remove('1')
>>> s
{'a', 'b', 'c', '2'}
>>> s.discard('2')
>>> s
{'a', 'b', 'c'}
>>> x = s.pop()
>>> s
{'b', 'c'}
>>> x
'a'
统计集合的个数
len(s)
清空集合
clear(s)
判断元素是否在集合中
a in s
集合的内置方法
方法 | 描述 |
---|---|
add() | 为集合添加元素 |
clear() | 移除集合中的所有元素 |
copy() | 拷贝一个集合 |
difference() | 返回多个集合的差集 |
difference_update() | 移除集合中的元素,该元素在指定的集合也存在。 |
discard() | 删除集合中指定的元素 |
intersection() | 返回集合的交集 |
intersection_update() | 返回集合的交集。 |
isdisjoint() | 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。 |
issubset() | 判断指定集合是否为该方法参数集合的子集。 |
issuperset() | 判断该方法的参数集合是否为指定集合的子集 |
pop() | 随机移除元素 |
remove() | 移除指定元素 |
symmetric_difference() | 返回两个集合中不重复的元素集合。 |
symmetric_difference_update() | 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。 |
union() | 返回两个集合的并集 |
update() | 给集合添加元素 |
bool值
python有一个名为bool的显示布尔数据类型,带有True和Flase作为遇赋值的内置名称。