类型
python3中支持int
,float
和complex
三种,其中int
支持任意长度的运算,float
实现的是小数的运算,complex
支持了复数的运算。
整数
整数没有长度的限制,同时可以使用十六进制,八进制或者二进制的整数,对应的前缀分别是0x
,0o
和0b
。
例如:1
2
3
4
5
6
7
80b1010110
86
0xFFFF
65535
0xffff
65535
0o76543
32099
浮点数
浮点数可以用小数来表示,也可以用2.5e2
之类的科学计数法来表示。
复数
复数的表示和数学上稍微有一些不同,在python中复数的虚部使用的是字母j而不是i。同时复数的实部和虚部都是浮点数类型。
表示时可以用a+bj
的形式也可以用complex(a, b)
。
表示复数的时候虚部和j不能分开,否则报错。如果虚部为$1$,仍然不能省略虚部,否则会报错。
类型转换
只需要将类型名称作为函数名就可以实现数据类型之间的转换。如:
整数的转换
使用int()
函数。该函数的使用方法有两种:
- 对数字类型使用,则括号内只能接受整数或者浮点数,其中浮点数的转换规则是向原点靠近。如
int(3.5) = 3
,int(-3.1) = -3
。括号内数字缺省时返回$0$。 - 对字符串使用,则括号内第一个参数是字符串,第二个参数是指定你要转换的字符串的进制。如
int('23', 16) = 35
。字符串必须要是符合该进制的,否则会报错。转换的结果是字符串在该进制下对应的十进制整数。
浮点数的转换
使用float()
函数,括号内可以接受数或者字符串,数不能为复数。
字符串也必须是可以正确转为浮点数的字符串,比如有多个小数点的就不能正常转换,会报错。字符串内最多包含一个+
或者-
,否则报错。符号和数字之间不能有空格,否则报错。
有一些特殊的字符串可以转换为一些特殊的浮点类型,如'infinity'
,'inf'
(不区分大小写),转换后就是inf
。在前面加上一个减号可以变成负无穷。还有'nan'
也会被转换成nan
。
复数的转换
使用complex(x[, y])
可以生成一个复数。其中实部为x
,而虚部为y
(可缺省,此时虚部为0)。前一个参数可以为字符串,此时括号内只能有这一个参数,并且字符串中的复数必须是紧凑的,即数和符号间不能有空格,如1+2j
,而不能是1 + 2j
。
运算
具体运算
python中数的运算大体和其他编程语言相似,其中加,减,乘都没有什么区别,对于除法,python中/
除法得到的总是一个浮点数,而要丢弃余数则需要用//
。//
除法得到的也不总是整数,这与被除数和除数的数据类型有关。如:1
2
3
4
5
6
7
8
9
10
11
12
13
1415 // 4
3
15.0 // 4
3.0
15 // 4.0
3.0
15.0 // 4.0
3.0
15.2 // 3.4
4.0
-15.2 // 3.4
-5.0
15.0 // (-4.0)
-4.0
可见//
运算不仅丢弃了余数,取商的方向也是严格按照小于原来商的方向取的。
python中的乘方运算符时**
,如:1
2
3
4
5
6
7
85 ** 2
25
5.0 ** 8
390625.0
9 ** 0.5
3.0
9 ** -1
0.1111111111111111
不同的数混合处理时,会一并转换为浮点数。
使用%
可以求得余数。如:1
2
3
4
5
6
7
85 % 3
2
5.0 % 1.6
0.19999999999999973
5.0 % (-1.6)
-1.4000000000000004
-5.0 % 1.6
1.4000000000000004
可以看出,//
和%
对于整除的理解是相同的。
赋值运算符除了最基本的=
之外,其他和c++类似,如乘方a = a ** b
可以简写为a **= b
,加法a = a + b
可以简写为a += b
。需要注意的是,python中没有++
,--
之类的自增自减操作。只能通过+= 1
和-= 1
实现类似的自增自减操作。
运算优先级
python中运算的优先级和正常的数学运算差别不大。都是乘方最先,乘除(含取余)其次,加减最后。事实上,python中有一点稍显不同,那就是当+
和-
是一元运算符时,两者的优先级位于乘方和乘除之间。
和数字操作有关的函数
绝对值
和绝对值相关的有abs(x)
和fabs(x)
两个函数。
abs(x)
是内置函数,而fabs(x)
是在math
模块中定义的,两者的区别还在于fabs(x)
适用于整数和浮点数,而abs(x)
还适用于复数。复数的abs就是复数的模。
取整
和取整相关的有ceil(x)
和floor(x)
两个函数。
ceil(x)
是向上取整,floor(x)
是向下取整。两者返回的都是整数。
两者都定义在math
模块中。
指数和对数
和指数与对数相关的函数有exp(x)
,log(x)
和log10(x)
。
exp(x)
返回$e^x$,log(x)
返回$\ln x$,log10(x)
返回$\lg x$。三者返回的都是浮点数。
三者都定义在math
模块中。
求幂
可以使用pow(x, y[, z])
函数求$x^y \mod z$(如果省略$z$则只计算$x^y$,此时$x, y$可以为浮点数;而若要使用$z$则$x, y, z$必须均为整数)。
该函数为内建函数,可以不导入模块,直接调用。函数返回值类型与结果有关,结果是整数则返回值为整数,否则为浮点数。
实际上在math
模块中也存在一个pow(x, y)
函数,但该函数只接受2个参数(均可为浮点数),并且只返回浮点数。
求算术平方根
使用math
模块中的sqrt(x)
求$x$的算术平方根。$x$需要是非负实数。
该函数作用不大。
分离整数和小数部分
使用math
模块中的modf(x)
函数以二元组形式得到$x$的整数部分与小数部分,两部分的数值符号与$x$相同,整数部分以浮点型表示。如:1
2123.45) math.modf(
(0.45000000000000284, 123.0)
四舍五入
使用math
模块中的round(x[, n])
函数对浮点数进行四舍五入,其中$n$是四舍五入到哪一位,默认为0(个位)。返回值是浮点数。
应该说,该函数的效果并不理想,一是因为它在python2.x版本和python3.x版本中有着不同的实现,导致两个版本对于同一个数的处理结果可能不同;二是该函数因为受计算机浮点数表示精度的影响,可能会产生误差,如round(2.355, 2)
会得到2.35
的神奇结果。所以如果要追求精确性,就最好别用它。
三角函数
math
模块中定义了sin(x)
,cos(x)
,tan(x)
,asin(x)
,acos(x)
,atan(x)
等三角函数。
此外,还定义了degrees(x)
和radians(x)
这两个函数,分别用于弧度转角度和角度转弧度,如:1
2
3
42) math.degrees(math.pi/
90.0
90.0) math.radians(
1.5707963267948966
与输出数有关的函数
bin(x)
,oct(x)
和hex(x)
分别可以输出int
类型数的二进制,八进制,十六进制的表示。如:1
2
3
4
5
6123) bin(
'0b1111011'
123) oct(
'0o173'
123) hex(
'0x7b'