Python numbers数字类型详解(int float complex)

Python 3 中的 numbers 类型与大多数编程语言类似,它是一个数值类型的合集,具体又可以细分为int(整型)、float(浮点型)、complex(复数)等类型。

获取对象类型

我们知道,每个对象都可以通过内置的函数 type 来查询该变量所指的对象类型。这里使用如下代码来演示 type 函数的使用:

a,b,c,d = 32.6,58,True,8+7j #定义四个变量a、b、c、d,为它们赋予不同类型的值
print(type(a),type(b),type(c),type(d)) #将这四个变量的类型打印出来

运行后会得到如下结果:

<class ‘float’> <class ‘int’> <class ‘bool’> <class ‘complex’> 结果中的四个尖括号内的内容表示了对应变量的类型。即,a 的类型是 float,b 的类型是 int,c 的类型是bool,d 的类型是 complex。 函数 type 对于所有的 Python 类型(包括后文中还会讲解的 string、list 等类型)都是有效的,其用法也是一样。

运算符

numbers 类型支持多种算术运算处理,具体的算术运算符见表。

运算符描述
+
*
/除,其结果为浮点数
%取余
**或者pow(x,y)
//取整数
abs()取绝对值
int(x,[base])将 x 转化为整型,x可以是字符串或者其他数字,base 是可选参数,默认为 10 ,表示将字符串 x 以 10 进制转化为整数。当 base 被赋值时,x 必须是字符串;当 x 为浮点数时,转成的整数会将小数点后面全部舍掉,如果想要更精确的转化,推荐用 math 库里面的 floor 和 ceil 函数来明确转换方式
float()将 x 转化为浮点型
complex(re,im)生成复数,re 为实数部分,im 为虚数部分,例如:complex(8,7),则生成一个复数 8+7j
c.conjugate()取 c 的共轭复数,假如 c=8+7j,则 c.conjugate() = 8-7j
divmod()返回商和余数,例如 divmod(13,4),返回的结果 (3,1)


下面对上述运算符号做实例演示:
定义两个变量,分别按照表4-1中的运算符对其运算操作,观察运算结果。
定义两个变量a和b,其中a的值为20,b的值为-3,按照表4-1中的运算符,对其进行加、减、乘、除等操作。代码如下:代码4-1:算术运算符的使用演示

a=20
b=-3
print(a+b)     #加号运算,输出:17
print(a-b)     #减号运算,输出:23
print(a*b)     #乘号运算,输出:-60
print(a/b)     #除号运算,输出:-6.666666666666667
print(a%b)     #取余运算,输出:-1
print(a**b)    #幂运算,输出:0.000125
print(a//b)    #整除运算,输出:-7
print(abs(b))   #绝对值运算,输出:3
print(int("1010",2))#将字符串以二进制转换成整数,输出:10
print(float("3.14"))#将字符串换成浮点数,输出:3.14
c =complex(a,b)  #生成复数,输出:(20-3j)
print(c)
print(c.conjugate())#计算共轭复数,输出:(20+3j)
print(divmod(a,b))#计算除数与余数,输出:(-7,-1)

上面的代码实现了表中列出的运算符的全部操作。在每行代码后面,都配有该代码输出的结果。读者可以看着代码参考输出结果,自行体会每个操作符的含义。

赋值运算符

下面来介绍numbers类型中所支持的赋值运算符:

运算符描述
+=加等,如a+=b等价于 a=a+b
-=减等,如 a-=b等价于a=a-b
*=乘等,如 a*=b,等价于 a=a*b
/=除等,如 a/=b 等价于 a=a/b
%=取余,如 a%=b 等价于 a=a%b
**=幂等,如 a**=b 等价于 a=a**b
//=取整除,如 a//=b 等价于 a=a//b

下面通过一段程序来演示“赋值运算符”的使用。实例如下:

定义两个变量 a 和 b,其中 a 的值为 9,b 的值为 3,按照表中的赋值运算符,对其进行加、减、乘、除等操作。

a=9 b=3
a+=b         #加。等价于 a=a+b
print(a)    #输出:12
a=9;b=3
a-=b         #加。等价于 a=a-b
print(a)     #输出:6
a=9;b=3
a*=b         #加。等价于 a=a*b
print(a)    #输出:27
a=9;b=3
a/=b         #加。等价于 a=a/b
print(a)     #输出:3.0
a=9;b=3
a%=b         #加。等价于 a=a%b
print(a)     #输出:0
a=9;b=3
a**=b         #加。等价于 a=a**b
print(a)    #输出:729
a=9;b=3
a//=b         #加。等价于 a=a//b
print(a)     #输出:3

上面的代码实现了表中列出的运算符的全部操作。在每行代码后面,都配有该代码输出的结果。读者可以看着代码参考输出结果,自行体会每个操作符的含义。

比较运算符

Python中的比较运算符常常用来比较numbers类型数据。下面来介绍numbers类型中所支持的比较运算符:

运算符描述
==等于
!=或者<>不等于
>大于
<小于
>=大于等于
<=小于等于
is指针等于
is not指针不等于

注意:字符串类型也可以使用比较运算符,但本质也是将字符串中字符的 ASCII 码数值拿出来比较。比较运算符有两种使用方法:一种是常规的方法——直接使用;另一种是链式使用,下面通过一段程序来依次演示。实例描述

  1. 定义三个变量,分别按照表4-3中的运算符对其运算操作,观察运算结果;
  2. 定义三个变量,使用链式比较符对其进行操作,观察运算结果。

1.“比较运算符”的常规使用方法

定义三个变量 a、b 和 c。其中 a 的值为 3,b 的值为 5,c 为 None。None 是 Python 中的一个特有的关键字,代表空值的意义,即没有任何值。示例如下:

a=3
b=5
c=None

print(a==b)#等于比较,输出:False
print(a!=b)#不等于比较,输出:True
print(a>b)#大于比较,输出:False
print(a<b)#小于比较,输出:True
print(a>=b)#大于等于比较,输出:False
print(a<=b)#小于等于比较,输出:True
print(a is b)#指针等于比较,输出:False
print(a is not b)#指针不等于比较,输出:True
print(c is None)#None值等于比较,输出:True

上面的每行代码后面,都配有该代码输出的结果。读者可以看着代码参考输出结果,自行体会每个操作符的含义。

2.链式使用“比较运算符”

链式表达式,就是在一行代码上出现两个比较运算符。接上面的代码,修改c的值为7。使用链式表达式,进行a、b、c三个变量的比较。代码如下:

c=7
print(a<b<c)     #链式比较,输出:True

这两行代码的输出为True。表明 a<b<c 的式子是成立的。在使用链式表达式时,需要考虑优先级的问题。

上述比较运算符表列出的 8 个比较运算符,具有相同的优先级。在使用 x < y <z 这样的链式比较式时,它会从左到右的顺序来进行计算,相当于x < y and y < z。

3.“比较运算符”&“算术运算符”的优先级比较

“比较运算符”的优先级会比“算术运算符”低,例如下面的情况:

print(1.1==1.1-0.1)#会输出False
上面的代码会先计算1.1-0.1,得到结果1.0;然后再与1.1进行比较,得到结果 False。

尽管 Python 内部有这样优先级的规则,但还是建议大家在写类似这样的代码时为后面的算术运算加上括号。例如:
print(1.1==(1.1-0.1))#将后面的算术运算括起来,表示优先计算

像上面这样的代码具有更好的可读性,代码易读,最大程度地消除代码歧义。这样写是一个优秀工程师的开发习惯。

4.复数的比较

复数类型的对象不能比较大小,只能比较是否相等。

后续文章会介绍布尔运算符和位运算符号,因为这两者比较重要,所以会单独介绍,大家关心的运动算优先级也会在下一节中介绍。

© 版权声明
THE END
喜欢就支持一下吧
点赞1赞赏
分享
评论 抢沙发
HarryPotter的头像|艾奇编程网

昵称

取消
昵称表情