数字运算符
Python中常用的数字运算操作符如表3-1所示。
操作符 |
说明 |
举例 |
** |
幕运算 |
2**3 |
~ |
按位取反 |
~5 |
- |
负号 |
-5 |
*, %, /, // |
乘法、求余数、真除法、floor 除法 |
2*3, 3%2, 5/2, 5//2 |
+, - |
加法、减法 |
2+3, 2-3 |
<<, >> |
向左移位、向右移位 |
3<<2, 12>>2 |
& |
按位与 |
5&2 |
^ |
按位异或 |
5^2 |
| |
按位或 |
5 | 2 |
<, <=, >, >=, ==, != |
小于、小于等于、大于、大于等于、相等、不等 |
2<3 , 2<=3 , 2>3 , 2>=3 . 2==3, 2!=3 |
not |
逻辑非 |
not True , not 2<3 |
and |
逻辑与 |
x>5 and x < 100 |
or |
逻辑或 |
x<5 or x>100 |
- 计算的优先级
表3-1中操作符的运算优先级按从上到下的顺序依次降低。可以用括号(括号优先级最高)改变计算顺序,如下:
print(2 + 3 * 5) # 17print((2 + 3) *5) # 25
- 自动数据类型转换
在运算过程中遇到不同类型的数字时,Python总是将简单的类型转换为复杂的类型,示例代码如下。
print(2+3.5,type(2+3.5)) # (5.5, class 'float') float比int复杂,转换成floatprint(2+3.5+(2+3j),type(2+3.5+(2+3j))) #((7.5 + 3j), <class 'complex'>) 复数比float复杂
Python 中的类型复杂度由简单到复杂依次为:布尔型-->整型-->浮点型-->复数。
- 求余数
x%y计算x除以y的余数,余数符号与y一致。若存在一个操作数为浮点数,则结果为浮点数,否则为整数,示例代码如下。
print(5%2, 5%-2, -5%2, -5%-2) # 1 -1 1 -1print(5%2.0, 5%-2.0, -5*2.0, -5%-2.0) # 1.0 -1.0 1.0 -1.0
- 真除法和floor除法
/ 运算执行真除法,即无论操作数是否为整数,计算结果都是浮点数,保留小数部分,示例代码如下。
print(4/2 , 5/2) # 2.0 2.5
// 运算称为floor除法。x//y 计算结果为不大于x除以y结果的最大整数。当两个操作数都是整数时,结果为int类型,否则为float类型,示例代码如下。
print(5//2, 5//-2, -5//2, -5//-2) # 操作数都是int类型,结果为int类型 2 -3 -3 2print(5//2.0, 5//-2.0, -5//2.0, -5//-2.0) # 操作数中一个是float类型,结果为float类型 2.0, -3.0, -3.0, 2.0
- 位运算
~ , & , |, ^, <<, >>都是位运算符,按操作数的二进制位进行操作。
按位取反~,操作数的二进制位中,1取反为0,0取反为1,符号位也取反,示例代码如下。
print(~5) # 5的8位二进制形式为00000101,按位取反为11111010,即-6print(~-5) # -5的8位二进制形式为11111011,按位取反为00000100,即4
按位与&,将两个操作数相同位置的数执行“与”操作,相同位置上的两个数都是1时,与的结果为1,否则为0,示例代码如下。
print(4&5) # 4的二进制形式为00000100,5为00000101,所以结果为00000100,即4print(-4&5) # -4的二进制形式为11111100,5为00000101,所以结果为00000100,即4
按位异或^,执行“按位异或”操作,相同位置上的数相同时结果为0,否则为1,示例代码如下。
print(4^5) # 4的二进制形式为00000100,5为00000101,所以结果为00000001,即1print(-4^5) # -4的二进制形式为11111100,5为00000101,所以结果为11111011,即-7
按位或|,执行“按位或”操作,相同位置上的数有一个为1时结果为1,否则为0,示例代码如下。
print(4|5) # 4的二进制形式为00000100,5为00000101,所以结果为00000101,即5print(-4|5) # -4的二进制形式为11111100,5为00000101,所以结果为11111101,即-3
向左移位<<,x<<y表示将x按二进制形式向左移动y位,末尾补0,符号位保持不变。向左移动1位等同于乘以2,示例代码如下。
print(1 << 2) # 4的二进制形式为00000001,所以结果为00000101,即5print(-1 << 2) # -4
向右移位>>,x>>y表示将x按二进制形式向右移动y位,符号位保持不变,向右移动1位等同于除以2,示例代码如下。
print(8 >> 2) # 2print(-8 >> 2) # -2
- 比较运算
比较运算的结果为逻辑值(True或False),示例代码如下。
print(2>3) # Falseprint(2<3) # True
Python 允许将连续的多个比较运算符进行缩写,示例代码如下。
a=1b=3c=5print(a < b < c) # 等价于a<b and b<c Trueprint(a == b < c) # 等价于a==b and b<c Falseprint(a < b > c) # 等价于a<b and b>c False
- 逻辑运算
逻辑运算(也称布尔运算)指逻辑值(True或False)执行 not and或or操作。在判断True或False之外的数据是否为逻辑值时,Python将属于下列情况的值都视为False。
- None各种数字类型的0,如0, 0.0, (0+0j)等。
- 空的序列,如[], ()等。
- 空的映射,如{}。
- 如果自定义类包含__bool()__返回False或__len__()方法返回0时,将实例对象视为False。
上述情况之外的值则视为True。
逻辑非not,not True 为False ,not False 为 True ,例如:
print(not True, not False) # False Trueprint(not None, not 0, not '', not {}) # True True True True
逻辑与and,x and y在两个操作数都为 True 时,结果才为 True,否则为False。当x为False时,由于x and y的运算结果已经为 False, 则Python不会再计算y的值,这称之为逻辑运算的短路,示例代码如下。
print(True and True, True and False, False and True, False and False)# 结果为: True False False False
逻辑或or,x or y在两个操作数都为False时,结果才为False,否则为True。当x为True时,由于x or y的运算结果已经为True,Python 不会再计算y,示例代码如下。
print(True or True, True or False, False or True, False or False)# 结果为: True True True False
数字处理函数
Python 提供了用于数字处理的内置函数和内置模块。
- 内置的常用数学函数,如下所示。
print(abs(-5)) # 返回绝对值 5print(divmod(9,4)) # 返回商和余数 (2, 1)a=5print(eval('a*a+1') # 返回字符串中的表达式,等价于 a*a+1 26 print(max(1,2,3,4)) # 返回最大值 4print(min(1,2,3,4)) # 返回最小值 1print(pow(2,3)) # pow(x,y)返回x的y次方,等价于x**y 8print(round(1.56)) # 四舍五入:只有一个参数时四舍五入结果为整数 2print(round(1.567, 2) # 四舍五入:保留指定位数的小数 1.57print(round(1.5), round(-1.5)) # 四舍五入:舍入部分为5时,向偶数舍入 2 -2print(sum(1, 2, 3, 4)) # 求和 10
- math模块Python在math模块中提供了常用的数学常量和函数,要使用这些函数需要先导入math模块。示例代码如下。
import math # 导入math模块math.pi # 数学常量pi 3.141592653589793math.e # 数学常量e 2.718281828459045math.inf # 浮点数的正无穷大,-math.inf表示负无穷大 infmath.cell(2.3) # math.ceil(x)返回不小于x的最小整数 3math.fabs(-5) # math . fabs ( x ) 返回 x 的绝对值 5.0math.factorial(0), math.factorial(5) # 返回非负数 x 的阶乘 (1,120)math.floor(2.3) # math.floor(x)返回不大于x的最大整数 2math.fmod(9, 4) # math.fnod(x ,y) 返回 x 除以 y 的余数 1.0x=[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]sum(x) # 求和,sum()函数由于浮点数原因存在不精确性 0.999999999999999math.fsum(x) # 求和,math.fsum()比sum()更精确 1.0math.gcd(12, 8) # math.gcd(x,y)返回x和y的最大公约数 4math.trunc(15.67) # math.trunc(x)返回x的整数部分 15math.exp(2) # math.exp(x)返回e的x次方 7.38905609893065math.expm1(2) # math.expml(x)返回e的x次方减1的值 6.38985609893065
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/121025.html