Python程序设计基础(4)

学习目标

  • 掌握Python的运算符与表达式

基本内容

  • 运算符与表达式

一.运算符与表达式

Python运算符

  1. 运算符是对操作数进行运算的符号。Python语言的运算符按照它们的功能可分为:
  • (1)算术运算符(+、-、*、/、**、//、%)。
  • (2)关系运算符(>、<、>=、<=、==、!=)。
  • (3)逻辑运算符(and、or、not)。
  • (4)位运算符(<<、>>、~、|、^、&)。
  • (5)赋值运算符(=、复合赋值运算符)。
  • (6)成员运算符(in、not in)。
  • (7)同一运算符(is、is not)。
  • (8)下标运算符([])。
  • (9)其它(如函数调用运算符())。
  1. 几个相关概念:
  • 目(操作数个数):单目和双目
  • 优先级
  • 结合性
  • 表达式:表达式是变量、数字、运算符、函数、括号等构成的有意义组合体,表达式的返回值是一个单一的数字
  1. 在一个表达式中,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|
  1. 数值的除法(/)总是返回一个浮点数,要获取整数使用//操作符。
  2. 混合计算时,Python会把整型转换成为浮点数。
  3. 不同数据类型在一起进行算术运算时,按照下面原则进行隐式类型转换:
  • 当有一个操作数的类型是复数时,其它数据都自动转换成复数类型。
  • 当有一个操作数的类型是小数时,其它数据都自动转换成小数类型。
  • 不支持数字和字符之间的隐式转换。
  • 数值的除法(/)总是返回一个浮点数,要获取整数使用//操作符。
  • 混合计算时,Python会把整型转换成为浮点数
  1. ** 运算符实现乘方运算,其优先级高于 * 和 / 。
  2. 注意运算符的多重含义。
# ** 优先级比 * 高
4 * 3 ** 2
36
# 返回一个被重复若干次的字符串
"a" * 10
'aaaaaaaaaa'

(2)关系运算符和关系表达式

运算符 含义 优先级 结合性
> 大于 这些运算符的优先级相同,但比下面的运算符优先级低 左结合
>= 大于等于
< 小于
<= 小于等于
== 等于 这些运算符的优先级相同,但比上面的运算符优先级高
!= 不等于
<> 不等于
  1. 关系运算符:(又称比较运算符)通过关系运算符将两个可做对比的操作数连接起来,寻找其中的关系,其结果为布尔值
运算符 示例
== 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
  1. 注意:Python采用None表示空值,表示没有值,属于一个特殊的值,而0为一个数值,因此二者并不相等。
# 非0即是True
print(not 0)
print(not 3)
True
False

(3)逻辑运算符和逻辑表达式

  1. 逻辑运算符
运算符 含义 优先级 结合性
not 逻辑非 上面的运算符比下面的运算符优先级高 右结合
and 逻辑与 左结合
or 逻辑或
  • 逻辑运算符用来对布尔值进行与、或、非等逻辑运算,运算最终结果是布尔值True和False。
  • 其中,“非”是单目运算符,布尔“与”和“或”为双目运算符。
  • 逻辑运算符的操作数都应该是布尔值,如果是其它类型的值,应该能够转换为布尔值才能进行运算。
  • and:逻辑与;or:逻辑或;not:逻辑非。
  1. 逻辑表达式及短路运算:
  • 对于与运算 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)身份运算符

  1. 身份比较符用于比较两个对象的内存位置是否相同,使用id()函数来确定。
运算符 含义 优先级 结合性
is 相同 相同 左结合
is not 不相同
  1. is检查用来运算的两个变量是否引用同一对象,如果相同返回True,不相同则返回False。
  2. 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)成员运算符和成员表达式

  1. 成员测试符用于查找对象是否在列表元组字符串集合字典序列数据中,其运算结果仍是逻辑值
运算符 含义 优先级 结合性
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
  1. 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
  1. 赋值运算符:用“=”表示
  2. 赋值表达式:变量 = 表达式。等号的左边必须是变量,右边是表达式。
  3. 链式赋值:在Python中,可通过链式赋值将同一个值赋给多个变量的,一般形式为:
x = y = 5
print(x, y, sep = ',')
5,5
  1. 多变量并行赋值
  • 变量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
  1. 复合的赋值运算符
  • 赋值运算符“=”与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当做有效表达式求值,并返回计算结果

二.表达式和语句

  1. 表达式:表达式是可以计算的代码片段,由操作数和运算符构成
  2. 语句:语句是Python程序的过程构造块
posted @ 2024-07-28 12:44  KenWan  阅读(47)  评论(0)    收藏  举报