学习目标
基本内容
一.运算符与表达式
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程序的过程构造块