Python程序设计基础(4)
学习目标
- 掌握Python的运算符与表达式
基本内容
- 运算符与表达式
一.运算符与表达式
Python运算符
- 运算符是对操作数进行运算的符号。Python语言的运算符按照它们的功能可分为:
- (1)算术运算符(+、-、*、/、**、//、%)。
- (2)关系运算符(>、<、>=、<=、==、!=)。
- (3)逻辑运算符(and、or、not)。
- (4)位运算符(<<、>>、~、|、^、&)。
- (5)赋值运算符(=、复合赋值运算符)。
- (6)成员运算符(in、not in)。
- (7)同一运算符(is、is not)。
- (8)下标运算符([])。
- (9)其它(如函数调用运算符())。
- 几个相关概念:
- 目(操作数个数):单目和双目
- 优先级
- 结合性
- 表达式:表达式是变量、数字、运算符、函数、括号等构成的有意义组合体,表达式的返回值是一个单一的数字。
- 在一个表达式中,Python会根据运算符的优先级从低到高进行运算:
- 生成式>函数调用、下标、切片>算术运算符>位运算符>关系运算符>逻辑运算符>lambda表达式
(1)算术运算符和算术表达式
| 运算符 | 含义 | 优先级 |
| + | 加法 | 这些运算符的优先级相同,但比下面的运算符优先级低 |
| - | 减法 | |
| * | 乘法 | |
| / | 除法 | |
| // | 取整除 | 这些运算符的优先级相同,但比上面的运算符优先级高 |
| ** | 幂运算 | |
| % | 取模 |
| 运算符 | 描述 | 实例 |
|---|---|---|
| + | 加:两个对象相加 | 10 + 20 输出结果 30 |
| - | 减:两个对象相减 | 10 - 20 输出结果 -10 |
| * | 乘:两个数相乘或返回一个被重复若干次的字符串 | 10 * 20 输出结果 200 |
| / | 除:x除以y | 20 / 10 输出结果 2 |
| % | 取模:除法的余数 | 20 % 10 输出结果 0 |
| ** | 幂:x的y次幂 | 2 ** 3 为2的3次方,输出结果8 |
| // | 取整除:返回商的整数部分 | 9 // 2 输出结果 4| |
- 数值的除法(/)总是返回一个浮点数,要获取整数使用//操作符。
- 混合计算时,Python会把整型转换成为浮点数。
- 不同数据类型在一起进行算术运算时,按照下面原则进行隐式类型转换:
- 当有一个操作数的类型是复数时,其它数据都自动转换成复数类型。
- 当有一个操作数的类型是小数时,其它数据都自动转换成小数类型。
- 不支持数字和字符之间的隐式转换。
- 数值的除法(/)总是返回一个浮点数,要获取整数使用//操作符。
- 混合计算时,Python会把整型转换成为浮点数。
- ** 运算符实现乘方运算,其优先级高于 * 和 / 。
- 注意运算符的多重含义。
# ** 优先级比 * 高
4 * 3 ** 2
36
# 返回一个被重复若干次的字符串
"a" * 10
'aaaaaaaaaa'
(2)关系运算符和关系表达式
| 运算符 | 含义 | 优先级 | 结合性 |
| > | 大于 | 这些运算符的优先级相同,但比下面的运算符优先级低 | 左结合 |
| >= | 大于等于 | ||
| < | 小于 | ||
| <= | 小于等于 | ||
| == | 等于 | 这些运算符的优先级相同,但比上面的运算符优先级高 | |
| != | 不等于 | ||
| <> | 不等于 |
- 关系运算符:(又称比较运算符)通过关系运算符将两个可做对比的操作数连接起来,寻找其中的关系,其结果为布尔值。
| 运算符 | 示例 |
|---|---|
| == | 1 == 2为False,' ABC' == ' ABC'为True |
| != | 2 != 3为True,'ABC' != 'abc'为True |
| > | 10 > 2为True |
| >= | '20' >= '2C'为False,字符串按对应位字符的ASCII码大小比较 |
| < | '20' < '19'为False |
| <= | 1 <= 2为True |
| 数学符号 | Python关系运算符 | 说明 | 举例 |
|---|---|---|---|
| > | > | 大于 | 5 > 2 |
| $\ge$ | >= | 大于或等于 | 4 >= 3 |
| < | < | 小于 | 5 < 6 |
| $\le$ | <= | 小于或等于 | 5 <= 6 |
| = | == | 等于 | 5 == 5 |
| $\neq$ | != | 不等于 | 2 != 3 |
# 注意正确使用“=”与“==”
a, b = 0, 1
if a = b:
print("a equal to b")
else:
print("a is not equal to b")
File "/var/folders/k6/x52rc50d6z51grg0dcf3hv_r0000gn/T/ipykernel_1386/450047771.py", line 3
if a = b:
^
SyntaxError: invalid syntax
# 注意正确使用“=”与“==”
a, b = 0, 1
if a == b:
print("a equal to b")
else:
print("a is not equal to b")
a is not equal to b
- 注意:Python采用None表示空值,表示没有值,属于一个特殊的值,而0为一个数值,因此二者并不相等。
# 非0即是True
print(not 0)
print(not 3)
True
False
(3)逻辑运算符和逻辑表达式
- 逻辑运算符
| 运算符 | 含义 | 优先级 | 结合性 |
| not | 逻辑非 | 上面的运算符比下面的运算符优先级高 | 右结合 |
| and | 逻辑与 | 左结合 | |
| or | 逻辑或 |
- 逻辑运算符用来对布尔值进行与、或、非等逻辑运算,运算最终结果是布尔值True和False。
- 其中,“非”是单目运算符,布尔“与”和“或”为双目运算符。
- 逻辑运算符的操作数都应该是布尔值,如果是其它类型的值,应该能够转换为布尔值才能进行运算。
- and:逻辑与;or:逻辑或;not:逻辑非。
- 逻辑表达式及短路运算:
- 对于与运算 a and b
- 如果a为真,继续计算b,b将决定最终整个表达式的真值,所以,结果为b的值。
- 如果a为假,无需计算b,就可以得知整个表达式的真值为假,所以,结果为a的值。
True and 0
0
False and 12
False
- 对于或运算 a or b
- 如果a为真,无需计算b,就可以得知整个表达式的真值为真,所以结果为a的值。
- 如果a为假,继续计算b,b将决定整个表达式最终的值,所以结果为b的值。
True or 0
True
False or 12
12
(4)位运算符
位运算符将数字转换成二进制数来进行运算,位运算符只能用于整型或字符串型数据,不能用于浮点数。
| 运算符 | 描述 | 实例 |
|---|---|---|
| & | 按位与运算 | 60 & 13 = 12 |
| | | 按位或运算 | 60 | 13 = 61 |
| ^ | 按位异或运算 | 60 ^ 13 = 49 |
| ~ | 按位取反运算 | ~60 = -61 |
| << | 左移运算 | 60 << 2 = 240 |
| >> | 右移运算 | 60 >> 2 = 15 |
(5)身份运算符
- 身份比较符用于比较两个对象的内存位置是否相同,使用id()函数来确定。
| 运算符 | 含义 | 优先级 | 结合性 |
| is | 相同 | 相同 | 左结合 |
| is not | 不相同 |
- is检查用来运算的两个变量是否引用同一对象,如果相同返回True,不相同则返回False。
- is not检查用来运算的两个变量是否不是引用同一对象,如果不是同一个对象返回True,否则返回False。
| 运算符 | 描述 | 实例 |
|---|---|---|
| is | is是判断两个标识符是不是引用自同一个对象 | x is y,类似id(x)==id(y),如果引用的是同一个对象则返回True,否则返回False |
| is not | is not是判断两个标识符是不是引用自不同对象 | x is not y,类似id(x)!=id(y)。如果引用的不是同一个对象则返回结果True,否则返回False。 |
x = y = 2.5
z = 2.5
x is not z
True
x = y = 2.5
x is y
True
x = y = 2.5
id(x) == id(y)
True
x = y = 2.5
id(x) != id(y)
False
x = 3
y = 2.5
id(x) == id(y)
False
(6)成员运算符和成员表达式
- 成员测试符用于查找对象是否在列表、元组、字符串、集合和字典等序列数据中,其运算结果仍是逻辑值。
| 运算符 | 含义 | 优先级 | 结合性 |
| in | 存在 | 相同 | 左结合 |
| not in | 不存在 |
| 成员运算符 | 逻辑表达式 | 描述 |
|---|---|---|
| in | x in y | 如果x在y序列中返回True,否则返回False。 |
| not in | x not in y | 如果x不在序列中返回True,否则返回False。 |
'a' in 'abcd'
True
'ac' in 'abcd'
False
a = [1, 2, 3, 4, 4]
b = 0
b in a
False
a = [1, 2, 3, 4, 4]
b = 1
b in a
True
a = (1, 2, 3, 4)
b = 0
b in a
False
a = (1, 2, 3, 4)
b = 1
b in a
True
a = {1 : '2', 3 : 4}
b = 1
b in a
True
a = {1 : 2, 3 : 4}
b = 4
b in a
False
a = {1, 2, 3, 4}
b = 0
b in a
False
a = {1, 2, 3, 4}
b = 1
b in a
True
- not in运算符用于在指定的序列中查找某个值是否不存在,不存在返回True,存在返回False。
'a' not in 'b, c, d'
True
3 not in (1, 2, 3, 4)
False
(7)赋值运算符和赋值表达式
Python语言支持链式关系表达式,相当于多个表达式之间逻辑与的关系。
# 等价于 1 < 2 and 2 < 3
1 < 2 < 3
True
# 等价于 2 >= 1 and 1 > 10
2 >= 1 > 10
False
- 赋值运算符:用“=”表示
- 赋值表达式:变量 = 表达式。等号的左边必须是变量,右边是表达式。
- 链式赋值:在Python中,可通过链式赋值将同一个值赋给多个变量的,一般形式为:
x = y = 5
print(x, y, sep = ',')
5,5
- 多变量并行赋值
- 变量1, 变量2, ..., 变量n = 表达式1, 表达式2, ..., 表达式n
- 变量个数要与表达式的个数一致,其过程为:首先计算表达式右边n个表达式的值,然后同时将表达式的值赋给左边的n个变量。
x, y, z = 3, 6, 9
print(x, y, z, sep = ',')
3,6,9
x = 20
x, x = 3, x * 3
print(x)
60
- 采取并行赋值,可以使用一条语句就可以交换两个变量的值:x, y = y, x
x, y = 4, 10
print("交换前的值为:x =", x, "y =", y)
x, y = y, x
print("交换后的值为:x =", x, "y =", y)
交换前的值为:x = 4 y = 10
交换后的值为:x = 10 y = 4
- 复合的赋值运算符
- 赋值运算符“=”与7种算术运算符(+、-、*、/、//、**、%)和5种位运算符(>>、<<、&、^、|)结合构成12种复合的赋值运算符。
- 例如:
- a += 3 等价于 a = a + 3
- a *= a + 3 等价于 a = a * (a + 3)
- a %= 3 等价于 a = a % 3
- 注意:“a *= a + 3“与”a = a * a + 3“是不等价的,”a *= a + 3“等价于”a = a * (a + 3)“,这里括号是必需的。
| 运算符 | 含义 | 举例 | 等效于 |
|---|---|---|---|
| += | 加法赋值字符串拼接 | sum +=、itemaStr += "Foo" | sum = sum +、itemaStr = aStr + "Foo" |
| -= | 减法赋值 | count -= 1 | count = count - 1 |
| *= | 乘法赋值 | x *= y + 5 | x = x * (y + 5) |
| /= | 除法赋值 | x /= y - z | x = x / (y - z) |
| //= | 整除赋值 | x //= y - z | x = x // (y - z) |
| %= | 取模赋值 | x %= 2 | x = x % 2 |
| **= | 幂运算赋值 | x **= 2 | x = x ** 2 |
| <<= | 左移赋值 | x <<= y | x = x << y |
| >>= | 右移赋值 | x >>= y | x = x >> y |
| &= | 按位与赋值 | x &= y | x = x & y |
| |= | 按位或赋值 | x |= y | x = x | y |
| ^= | 按位异或赋值 | x ^= y | x = x ^ y |
a, b = 3, 5
a += b
print(a)
8
a = 7
a *= a + 3
print(a)
70
(8)运算符的优先级
| 优先级 | 运算符 | 描述 |
|---|---|---|
| 1 | ** | 指数(最高优先级) |
| 2 | ~、+、- | 按位翻转,正负号 |
| 3 | *、/、%、// | 乘、除、取模和取整数 |
| 4 | +、- | 加法减法 |
| 5 | >>、<< | 右移、左移运算符 |
| 6 | & | 按位与 |
| 7 | ^、| | 位运算符 |
| 8 | <=、<、>、>= | 比较运算符 |
| 9 | ==、!= | 等于运算符 |
| 10 | =、%=、/=、//=、-=、+=、*=、**= | 赋值运算符 |
| 11 | is、is not | 身份运算符 |
| 12 | in、not in | 成员运算符,判断一个字符串是否包含于另一个字符串 |
| 13 | not、or、and | 逻辑运算符 |
(9)自动类型转换
在Python中,同一个表达式允许不同类型的数据参加运算,这就要求在运算之前,先将这些不同类型的数据转换成同一类型,然后再进行运算。
type(10 / 4 * 4)
float
(10)强制类型转换
当自动类型转换达不到转换需求时,可以使用类型转换函数,将数据从一种类型强制(或称为显式)转换成另一种类型。
| 函数 | 功能描述 |
|---|---|
| int(x) | 将x转换为整数 |
| float(x) | 将x转换为浮点数 |
| complex(x) | 将x转换为复数,其中实部为x,虚部为0 |
| complex(x, y) | 将x、y转换为复数,其中实部为x,虚部为y |
| str(x) | 将x转换为字符串 |
| chr(x) | 将一个整数转换为一个字符,整数为字符的ASCII编码 |
| ord(x) | 将一个字符转换为它的ASCII编码的整数值 |
| hex(x) | 将一个整数转换为一个十六进制字符串 |
| oct(X) | 将一个整数转换为一个八进制字符串 |
| eval(x) | 将字符串str当做有效表达式求值,并返回计算结果 |
二.表达式和语句
- 表达式:表达式是可以计算的代码片段,由操作数和运算符构成
- 语句:语句是Python程序的过程构造块

浙公网安备 33010602011771号