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 码数值拿出来比较。比较运算符有两种使用方法:一种是常规的方法——直接使用;另一种是链式使用,下面通过一段程序来依次演示。实例描述
- 定义三个变量,分别按照表4-3中的运算符对其运算操作,观察运算结果;
- 定义三个变量,使用链式比较符对其进行操作,观察运算结果。
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.复数的比较
复数类型的对象不能比较大小,只能比较是否相等。
后续文章会介绍布尔运算符和位运算符号,因为这两者比较重要,所以会单独介绍,大家关心的运动算优先级也会在下一节中介绍。