Python3从零基础到入门(2)—— 运算符
目录
一、算术运算符
1.四则运算符
(1)加
(2)减
(3)乘
(4)除
2.取模
3.幂
4.取整除
二、关系运算符
1.等于关系运算符
2.不等于关系运算符
3.大于关系运算符
4.小于关系运算符
5.大于等于关系运算符
6.小于等于关系运算符
7.不同数据类型的比较
(1)数字与数字比较
(2)字符串与字符串比较
(3)列表、元组之间的比较
(4)字符串与数字比较
三、赋值运算符逻辑运算符
1.简单赋值运算符
2.加法赋值运算符
3.减法赋值运算符
4.乘法赋值运算符
5.除法赋值运算符
6.取模赋值运算符
7.幂赋值运算符
8.取整除赋值运算符
四、位运算符
1.位运算概览
(1)布尔位运算符
1)按位与运算符 ( & )
2)按位或运算符 ( | )
3)按位异或运算符( ^ )
4)按位取反运算符( ~ )
2.移位运算符
(1)左移动运算符( > )
五、成员运算符
1.in
2.not in
六、身份运算符
1.is与is not 运算符
2.is 与 ==区别
七、运算符优先级
1.圆括号的表达式
2.读取,切片,调用,属性引用
3.await 表达式
4.乘方(指数)
5.正,负,按位非 NOT
6.乘,矩阵乘,除,整除,取余
7.加和减
8.移位
(1)左移
p id="%EF%BC%882%EF%BC%89%E5%8F%B3%E7%A7%BB%3E%3E-toc" (2)右移>9.按位与 AND
10.按位异或 XOR
11.按位或 OR
12.比较运算,包括成员检测和标识号检测
13.逻辑非 NOT
14.逻辑与 AND
15.逻辑或 OR
16.条件表达式
17.lambda 表达式
18.赋值表达式
一、算术运算符
1.四则运算符
(1)加
加法运算符用 + 表示,代表对两个数据进行相加操作,如下:
a = 10 b = 8 print(a + b)
输出的结果是:
18
那么如果两个变量不是整数,会怎么样呢?我们来看下:
a = 10.6 b = 8.41 print(a + b)
输出结果如下:
如果你对 C语言中浮点数的存储方式比较熟悉,那么就应该知道,浮点数的计算是会产生误差的的,所以明明在数学上 10.6 + 8.41 的结果是 19.001,但是输出来竟然是 19.009999999999998。这就是浮点数的精度误差。
(2)减
减法运算符用 - 表示,代表对两个数据进行相减操作,如下:
a = 10 b = 8 print(a - b)
输出的结果是:
2
对于浮点数的相减,同样会产生精度问题,不再累述。
(3)乘
乘法运算符用 * 表示,代表对两个数据进行相乘操作,如下:
a = 10 b = 8 print(a * b)
输出的结果是:
80
对于浮点数的相乘,同样会产生精度问题,不再累述。
(4)除
除法运算符用 / 表示,代表对两个数据进行相除操作,如下:
a = 10 b = 3 print(a / b)
输出的结果是:
3.3333333333333335
由于并非整除,所以产生了一定的精度误差,符合预期。
2.取模
取模运算符用 % 表示,代表两数相除的到的余数,如下:
a = 10 b = 3 print(a % b)
输出的结果是:
1
那么,如果除数是负数,或者被除数是负数,结果又是多少呢?如下:
print(-10 % 3) print(-10 % -3) print(10 % -3)
输出结果如下:
在 Python 中,取模结果的符号和除数相同;在 C语言 中,取模结果的符号和被除数相同。
3.幂
幂用 ** 表示。
其中 a**b 代表 a 的 b 次幂。如下:
a = 3 b = 4 print(3**4)
输出的结果如下:
81
当然,幂运算的右操作数,也支持负数。
4.取整除
取整除就是数学上的取下整的意思。用 // 表示,如下:
a = 10 b = 6 print(10 // 6)
输出的结果是:
1
二、关系运算符
关系运算符主要包括 ==、!=、>、=、 表示,用于比较两个值的大小。其基本语法如下:
x > y
若 x 的值比 y 的值大,则返回True;否则返回False。
例如:
a = 10 b = 9 print(a > b)
若大于则返回True;否则返回False。
输出结果如下:
True
4.小于关系运算符
小于关系运算符在Python中用
x若 x 的值比 y 的值小,则返回True;否则返回False。
例如:
a = 10 b = 11 print(a若小于则返回True;否则返回False。
输出结果如下:
True
5.大于等于关系运算符
大于等于关系运算符在Python中用 >= 表示,用于比较两个值的大小。其基本语法如下:
x >= y若 x 的值大于等于 y 的值,则返回True;否则返回False。
例如:
a = 10 b = 9 print("a >= b :", (a >= b)) c = 5 d = 5 print("c >= d :", (c >= d))以上代码,a 的值是 10,b 的值是 11,c 的值是 5 ,d 的值是 5 ,使用 >= 关系运算符判断 a 是否大于等于 b 以及 c 是否大于等于 d,并输出其返回值。
输出结果如下:
6.小于等于关系运算符
小于等于关系运算符在Python中用 >a = [1,2,3] >>>b = a #b=a将两者指向同一个对象 >>>b is a #判断引用对象是否为同一个 True >>>b == a #判断引用变量的是否相等 True >>>b = a[:] #b=a[:]会创建一个新的与a完全相同的对象,但是与a并不指向同一对象 >>>b is a False >>>b == a True
七、运算符优先级
在python中,运算符优先级是指在python解释器在进行多个运算时,根据运算符的优先级规则先计算这个后再计算另一个。如小学时数学中所学的先算括号里面的再算乘除,最后算加减,同理,python在进行运算时根据规则也是如此运算。
以下是从最高到最低优先级的所有运算符:
1.圆括号的表达式
一般使用括号()、中括号[]及大括号{}表示,例如:
a = (1 + 2) * 3 # a 的值为 9其中小括号 (1+2) 用于强制对 1 和 2 的和进行计算,使得计算结果乘以 3。由于乘法操作符 * 的优先级高于加法操作符 +,因此不使用小括号进行强制运算优先级时,计算的顺序可能会与期望不同。因此,在这个例子中使用小括号能够确保计算顺序正确。
2.读取,切片,调用,属性引用
分别为:x[index], x[index:index], x(arguments...), x.attribute,按运算符优先级从高到低如下:
- x(arguments...):函数调用运算符 () 优先级最高,总是首先执行。在一个表达式中,由于小括号可以改变运算符优先级关系,因此这个运算符是最强的分组运算符。
- x[index] 和 x[index:index]:它们的优先级相同,都比点运算符低。这两个运算符都是序列类型(如字符串、列表和元组)中的索引和切片操作符,用于获取序列中的元素或子序列。
- x.attribute:点运算符 . 是访问对象属性的运算符,在运算符优先级中优先级最低。在一个表达式中,点运算符总是最后执行,并且可以链接多个点运算符形成一个长链,例如 :obj.attr1.attr2.attr3。
例如:
my_list = ["apple", "banana", "cherry"] index = 1 result = my_list[index].upper() print(result)
输出结果为:
BANANA
这里定义了一个列表 my_list 和一个整数变量 index。接着,我们使用索引操作 my_list[index] 访问了列表的第二个元素 "banana",得到了一个字符串对象。然后,再使用点运算符 .upper() 访问字符串对象的内置方法 upper(),将其字母全部转换为大写形式,然后打印结果。其中可以看到先是进行了切片操作再进行的点运算。
3.await 表达式
await是用来等待协程完成的,像await x则是表示一个暂停当前协程的语法。
4.乘方(指数)
用符号**表示,操作如下:
a = 2 + 3 * 5**2 # a的值为77
在python中还能使用内置函数pow()来表示:
pow(2, 3) # 值为8
与 ** 运算符不同的是,pow() 函数还可以指定第三个参数表示模数,即将结果对某个值取模的结果。如下:
pow(2, 3, 5) # 值为3
5.正,负,按位非 NOT
其符号分别为:+x、-x、 ~x,操作如下:
a = 10 b = -a # 负运算符,优先级最高 c = ~a # 按位非 NOT 运算符,优先级第二高 d = a + b * c print(d)
输出结果为:
1010
1010
120
可以看到的是以上代码先是运算完a、b、c的值再进行的加减乘除,而c的值为-11,怎么得到的?这里是将变量 a 的二进制表示中的每一位取反(0 变成 1,1 变成 0),得到补码 c=-11
6.乘,矩阵乘,除,整除,取余
使用的表示符号分别是:*, @, /, //, %。它们的预算优先级相同,运算时按照从左往右运算,例如:
a = 10 b = 3 # 乘法 c = a * b print("乘法:%d" % c) # 矩阵乘法 import numpy as np x = np.array([[1, 2], [3, 4]]) y = np.array([[5, 6], [7, 8]]) z = np.dot(x, y) print("矩阵乘法:\n", z) # 除法 d = a / b print("除法:%.2f" % d) # 整除 e = a // b print("整除:%d" % e) # 取余 f = a % b print("取余:%d" % f)
输出结果为:
乘法:30
矩阵乘法:
[[19 22]
[43 50]]
除法:3.33
整除:3
取余:1
7.加和减
加和减的使用和在数学上的使用基本一致,不过在python的表达中可以这样使用:
a = 2 a += 2 a -= 2 print(a)
结果为:
2
在python中,可以使用+=、-=这样来进行加减的运算。
8.移位
在 Python 中,移位(Shift)是一种按比特位对数值进行位移的运算。移位操作分为左移和右移两种。
(1)左移
p将数字的所有二进制位向左移动指定数量的位置,并在低位设置零值。例如,在整数 6(二进制表示:110)执行 6 > 2 时,将其向右移动两个位置,变成 11111111111111111111111111111110,其十进制值为 -2。这里的-6二进制表示是使用了补码所以有点长,在python中-6的表示为:0b11111111111111111111111111111010。9.按位与 AND
& 符号代表按位与 AND 运算符。将两个数字的每个对应二进制位进行比较,如果两个位置上的二进制位都为 1,则该位结果为 1,否则为 0。如下是12 和 25(二进制表示分别为 1100 和 11001)的按位与的运算表示:
1100 & 11001 ------- 10000
所以,Python 中的 12 & 25 的结果为 16。
10.按位异或 XOR
使用符号 ^ 表示,如果两个位置上的二进制位不相同,则该位结果为 1,否则为 0。如下是12 和 25(二进制表示分别为 1100 和 11001)的按位异或的运算表示:
1100 ^ 11001 ------- 11101
因此,Python 中的 12 ^ 25 的结果为 29。
11.按位或 OR
使用符号 | 表示,在二进制位上对比,有一个为1,则为1,反之则为0。如下是12 和 25(二进制表示分别为 1100 和 11001)的按位或的运算表示:
1100 | 11001 ------- 11101
结果为:29。
12.比较运算,包括成员检测和标识号检测
一般使用 in,not in, is,is not, =, !=, == 来表达。从左往右分别为判断在不在一个集合里用 in 或 not in ;判断属不属于一个集合用 is 或 is not ,属于返回 True,反之返回 Flase;顺着的四个这是小于、小于等于和大于、大于等于;在python中不等于用 != 这个表示,而等号 = 则表示的是赋值,双等号 == 才表示等于。
13.逻辑非 NOT
逻辑非 NOT 运算符使用符号 not 表示。逻辑非是一个布尔运算符,用于将某个布尔表达式的值取反,即如果表达式的值为 True,则逻辑非返回 False,否则返回 True。以下是逻辑非 NOT 运算符的示例代码:
x = True y = not x print(y) # 输出 False
14.逻辑与 AND
逻辑与 AND 运算符使用符号 and 表示。逻辑与也是一个布尔运算符,用于将多个布尔表达式连接起来进行逻辑与运算,即只有当所有表达式的值均为 True 时,逻辑与才返回 True,否则返回 False。以下是逻辑与 AND 运算符的示例代码:
x = True y = False z = x and y print(z) # 输出 False
15.逻辑或 OR
使用符号 or 表示。用于将多个布尔表达式连接起来进行逻辑或运算,即只有当其中至少一个表达式的值为 True 时,逻辑或才返回 True,否则返回 False。以下是逻辑或 OR 运算符的示例代码:
x = True y = False z = x or y print(z) # 输出 True
需要注意的,按位和逻辑是俩种不同的运算方式:
1)按位运算是指对二进制数进行的运算,以二进制位为单位进行处理。按位与(&)和按位或(|)是其中常见的运算符。按位与表示两个二进制数对应位上都为1时结果为1,否则为0;按位或表示两个二进制数对应位上都为0时结果为0,否则为1。
2)逻辑运算是指对逻辑变量进行的运算,逻辑变量只有两个取值:真(true)和假(false)。逻辑与(&&)和逻辑或(||)是其中常见的运算符。逻辑与表示两个逻辑变量都为真时结果为真,否则为假;逻辑或表示两个逻辑变量有一个为真时结果为真,否则为假。
16.条件表达式
条件表达式(也称为三元表达式)可以用来简洁地表示一个条件语句,使用 if-else 语句的形式进行赋值。当条件表达式的值为 True,则将变量赋值为表达式1的值;否则将变量赋值为表达式2的值。以下是一个条件表达式的示例代码:
x = 5 y = 10 z = x if x > y else y print(z) # 输出 10,因为 x
条件表达式可以替代常见的 if-else 语句,使代码更加简洁、清晰,但同时也容易造成代码可读性较低,所以还是要根据具体场景选择使用哪个方式。
17.lambda 表达式
lambda 表达式是一种用于创建匿名函数的语法结构,以下是一个使用 lambda 表达式实现简单的加法运算的示例代码:
add = lambda x, y: x + y print(add(3, 5)) # 输出 8
lambda 表达式通常用于简化代码、增强可读性,在一些函数式编程的场景中具有重要的作用。但也需要注意不要过度依赖 lambda 表达式,以免影响代码的可维护性和可读性。
18.赋值表达式
赋值表达式(也称为海象运算符),是 Python 3.8 新增的一个语法结构。它可以在一行代码中同时进行变量赋值和表达式运算,以简化代码并提高可读性。但是需要注意,赋值表达式并不是一种通用的语法结构,在一些特殊的情况下可能会导致代码难以理解,因此需要谨慎使用。以下是基本形式:
变量名 := 表达式 #:= 就是赋值表达式的运算符,左侧是要被赋值的变量名,右侧是要进行的表达式运算。
还没有评论,来说两句吧...