类型
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
2math.modf(123.45)
(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
4math.degrees(math.pi/2)
90.0
math.radians(90.0)
1.5707963267948966
与输出数有关的函数
bin(x),oct(x)和hex(x)分别可以输出int类型数的二进制,八进制,十六进制的表示。如:1
2
3
4
5
6bin(123)
'0b1111011'
oct(123)
'0o173'
hex(123)
'0x7b'