乘方运算符(**)来执行幂运算。实际上,可不使用这个运算符,而使用函数pow。
>>> 2 ** 3
8
>>> pow(2, 3)
8
像前一个示例那样使用函数称为调用函数:你向它提供实参(这里是2和3),而它返回一个值。鉴于函数调用返回一个值,因此它们也是表达式。实际上,你可结合使用函数调用和运算符来编写更复杂的表达式(就像前面使用函数int时那样)。
>>> 10 + pow(2, 3 * 5) / 3.0
10932.666666666666
有多个内置函数可用于编写数值表达式。例如,abs计算绝对值,round将浮点数圆整为与之最接近的整数。
>>> abs(-10)
10
>>> 2 // 3
0
>>> round(2 / 3)
1.0
请注意最后两个表达式的差别。整数总是向下圆整,而round圆整到最接近的整数,并在两个整数一样近时圆整到偶数。如果要将给定的数向下圆整,该如何做呢?例如,你知道某人的年龄为32.9,并想将这个值向下圆整为32,因为他还没有满33岁。Python提供了完成这种任务的函数floor(向下取整),但你不能直接使用它,因为像众多很有用的函数一样,它也包含在模块中。
引入模块:import math
注意: 使用某个模块下的函数,必须先引入这个模块,否则无法正常使用。
可将模块视为扩展,通过将其导入可以扩展Python功能。要导入模块,可使用特殊命令
>>> import math
>>> math.floor(32.9)
32
请注意其中的工作原理:我们使用import导入模块,再以module.function的方式使用模块中的函数。就这里执行的操作而言,也可像前面处理input的返回值那样,将这个数字转换为整数。
>>> int(32.9)
32
注意:还有一些类似的函数,可用于转换类型,如str和float。实际上,它们并不是函数,而是类。
模块math还包含其他几个很有用的函数。例如,ceil与floor相反,返回大于或等于给定数的最小整数(向上取整)。
>>> math.ceil(32.3)
33
>>> math.ceil(32)
32
如果确定不会从不同模块导入多个同名函数,你可能不想每次调用函数时都指定模块名。在这种情况下,可使用命令import的如下变种:
>>> from math import sqrt
>>> sqrt(9)
3.0
通过使用命令import的变种from module import function,可在调用函数时不指定模块前缀。
事实上,可使用变量来引用函数(以及其他大部分Python元素)。执行赋值语句foo =math.sqrt后,就可使用foo来计算平方根。例如,foo(4)的结果为2.0
cmath 和复数
函数sqrt用于计算平方根。下面来看看向它提供一个负数的情况:
>>> from math import sqrt
>>> sqrt(-1)
Traceback (most recent call last): #交互式解释器报错
...
ValueError: math domain error
在有些平台上,结果如下:
>>> sqrt(-1)
nan #nan具有特殊含义,指的是“非数值”(not a number)
如果我们坚持将值域限定为实数,并使用其近似的浮点数实现,就无法计算负数的平方根。负数的平方根为虚数,而由实部和虚部组成的数为复数。Python标准库提供了一个专门用于处理复数的模块。
>>> importcmath
>>> cmath.sqrt(-1)
1j
注意到这里没有使用from ... import ...。如果使用了这种import命令,将无法使用常规函数sqrt。类似这样的名称冲突很隐蔽,因此除非必须使用from版的import命令,否则应坚持使用常规版import命令。
1j是个虚数,虚数都以j(或J)结尾。复数算术运算都基于如下定义:-1的平方根为1j。这
里不深入探讨这个主题,只举一个例子来结束对复数的讨论:
>>> (1 + 3j) * (9 + 4j)
(-3 + 31j)
#这里3j * 4j = -3 *-4 = 12,所以推导出(1*9)+(1*4j)+(3j*9)+(3j*4j) = 9+4j+27j+-12 = -3 + 31j
Python没有专门表示虚数的类型,而将虚数视为实部为零的复数。
向上取整操作 格式:math.ceil(数值) 返回值:整型
a = math.ceil(10.23) #大于一个数的最小整数,输出11
向下取整操作 格式:math.floor(数值) 返回值:整型
a = math.floor(10.23) #小于一个数的最大整数,输出10
五舍六入操作 格式:round(数值) 返回值:整数 注意:此函数不在math模块当中!!!
a = round(10.66, 2)第二个参数是保留多少位小数,输出10.66,如果没有保留值输出11
计算一个数值的N次方 格式: math.pow(底数,幂,取余) 返回值:浮点类型 注意:该操作相当于**运算但是结果为浮点型
a = pow(2,3) # 相同于2**3 输出8
a = pow(2,3,2) 输出0 #8被2整除余0
#注意pow是内置函数,返回整型,math.power则返回浮点型
开平方 格式:math.sqrt(数值) 返回值:浮点数
a = math.sqrt(16) 开平方根输出4.0
对一个数值获取其绝对值操作 格式:math.fabs(数值) 返回值:浮点数
a = abs(-2) 输出-2的绝对值2.0
math.power返回浮点型
对一个数值获取其绝对值操作 格式:abs(数值) 返回值:可能是整数可以能浮点数 注意:abs() 他是内建函数 同时返回值根据原类型决定
a = math.abs(-2) 输出-2的绝对值2
abs是内置函数,返回整型
将一个浮点数拆成整数和小数部分组成的元组 格式:math.modf(数值) 返回值:元组 (小数部分,整数部分)
a = math.modf(12.22) 输出元祖(0.22000000000000064, 12.0)
将第二个数的正负号复制给第一个数 格式:math.copysign(值1,值2) 返回值:值1 符号是值2的正负号
a = math.copysign(2, -1) 输出-2.0
将一个序列的数值进行相加求和 格式:math.fsum(序列) 返回值:浮点数
a = math.fsum([1,2,3]) 输出6.0
将一个序列的数值进行相加求和 格式:sum(序列) 返回值:数值类型
a = sum([1,2,3]) 输出6