第五章 数值类型

数值类型基础知识

完整的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
身份运算符
赋值运算符描述
isis 是判断两个标识符是不是引用自一个对象 x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False
is notis 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作为遇赋值的内置名称。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值