Python3 基础教程

Python3 运算符

🎉摘要:本文全面解析 Python3 运算符,涵盖算术、比较、赋值、位运算、逻辑、成员及身份运算符。包含详细用法说明、代码示例及运算符优先级表,助您快速掌握 Python 基础计算与逻辑判断语法。

在 Python3 中,运算符就是一串符号,用来对变量或值进行计算、比较、判断、赋值等操作。下面将分别介绍 Python3 中的算术、比较、赋值、位运算符。

算术运算符

算术运算符就是用来做数学计算的符号,主要用于数字之间的加减乘除等运算。

在 Python3 中,提供的算术运算符如下表:

运算符描述
+加法,用于执行加法操作
-减法,用于执行减法操作
*乘法,两个数相乘,或返回一个被重复若干次的字符串
/除法,用于执行除法操作, x 除以 y
%取模,返回除法的余数
**幂,返回x的y次幂
//取整除, 往小的方向取整数

示例:演示算术运算符的用法。

# 定义两个数字
a = 10
b = 3

# 1. 加法 +
print("加法:", a + b)   # 13

# 2. 减法 -
print("减法:", a - b)   # 7

# 3. 乘法 *
print("乘法:", a * b)   # 30

# 4. 除法 / (结果是小数)
print("除法:", a / b)   # 3.3333333333333335

# 5. 整除 // (只取整数部分)
print("整除:", a // b)  # 3

# 6. 取余 % (求余数)
print("取余:", a % b)   # 1

# 7. 幂运算 ** (次方)
print("平方:", a ** 2)  # 100
print("立方:", a ** 3)  # 1000

比较运算符

比较运算符就是用来比较两个值的大小、是否相等的,比较结果只会是 True(真)或 False(假)。

在 Python3 中,提供的比较运算符如下表:

运算符描述
==等于,比较对象是否相等
!=不等于,比较两个对象是否不相等
>大于, 返回 x 是否大于 y
<小于,返回 x 是否小于 y。所有比较运算符返回 1 表示真,返回 0 表示假。这分别与特殊的变量 True 和 False 等价。
>=大于等于,返回 x 是否大于等于 y。
<=小于等于,返回 x 是否小于等于 y。

示例:

a = 10
b = 3

print("a == b", a == b)   # False
print("a != b", a != b)   # True
print("a > b",  a > b)    # True
print("a < b",  a < b)    # False
print("a >= b", a >= b)   # True
print("a <= b", a <= b)   # False

赋值运算符

赋值运算符就是用来给变量赋值的符号,最基础的是 =,还有一系列简写的复合赋值,如 +=、*= 等等。

在 Python3 中,提供的赋值运算符如下表:

运算符描述
=简单的赋值运算符
+=加法赋值运算符
-=减法赋值运算符
*=乘法赋值运算符
/=除法赋值运算符
%=取模赋值运算符
**=幂赋值运算符
//=取整除赋值运算符
:=海象运算符,该运算符的主要目的是在表达式中同时进行赋值和返回赋值的值。

示例:

a = 10

a += 2   # a = 10 + 2 → 12
print(a)

a -= 3   # a = 12 - 3 → 9
print(a)

a *= 2   # a = 9 * 2  → 18
print(a)

a /= 3   # a = 18 / 3 → 6.0
print(a)

a //= 2  # a = 6 // 2 → 3
print(a)

a %= 2   # a = 3 % 2  → 1
print(a)

a **= 3  # a = 1 ** 3 → 1
print(a)

海象运算符(Walrus Operator)是在 Python 3.8 及更高版本中引入的一种新的语法特性,它使用 := 符号进行表示。这个运算符的主要目的是在表达式中同时进行赋值和返回赋值的值。

使用海象运算符可以在一些情况下简化代码,尤其是在需要在表达式中使用赋值结果的情况下。这对于简化循环条件或表达式中的重复计算很有用。

下面是一个简单的实例,演示了海象运算符的使用:

# 传统写法
n = 10
if n > 5:
 print(n)  # 输出:10

# 使用海象运算符
if (n := 10) > 5:  # 这里将 10 赋值给 n,并且返回 10,最后就是 10 > 5 比较运算
 print(n)  # 输出:10

位运算符

位运算就是直接对二进制位(0 和 1)进行操作的运算,速度非常快,主要用于底层操作、加密、状态判断等场景。

在 Python3 中,提供的位运算符如下表:

运算符描述
&

按位与运算符:参与运算的两个值,如果两个相应二进制位都为 1,则该位的结果为1。否则为 0。如下图:

|

按位或运算符:只要对应的两个二进制位有一个为1时,结果位就为1。如下图:

^按位异或运算符:当对应的二进制位相异时(即一个 1 、一个 0),结果位就为1。否则,结果位为 0。如下图:
~按位取反运算符:对数据的每个二进制位取反,即把 1 变为 0,把 0 变为 1。~x 类似于 -x-1,如下图:
<<左移动运算符:运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补 0。
>>右移动运算符:把“>>”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。

示例:

a = 60  # 0011 1100
b = 13  # 0000 1101

# 按位与
# 0011 1100
# 0000 1101 &
# -----------
# 0000 1100
# a & b = 12  -> 1100
print("a & b =", a & b)

# 按位或
# 0011 1100
# 0000 1101 |
# -----------
# 0011 1101
# a | b = 61  -> 0011 1101
print("a | b =", a | b)

# 按位异或
# 0011 1100
# 0000 1101 ^
# -----------
# 0011 0001
# a ^ b = 49 -> 0011 0001
print("a ^ b =", a ^ b)

# 按位取反
# 0011 1100 ~
# -----------
# 1100 0011
# ~a = -61 -> 1100 0011
print("~a =", ~a)

# 左移2位
# 0011 1100
# 1111 0000
# a << 2 = 240 -> 1111 0000
print("a << 2 =", a << 2)

# 右移2位
# 0011 1100
# 0000 1111
# a >> 2 = 15 -> 1111
print("a >> 2 =", a >> 2)

逻辑运算符

逻辑运算符用于对布尔值(True/False)进行逻辑运算,是编程中控制流程(如条件判断、循环)的核心工具。

在 Python3 中,提供的逻辑运算符如下表:

运算符逻辑表达式描述
andx and y布尔“与”:如果 x 为 False,x and y 返回 x 的值,否则返回 y 的计算值。
orx or y布尔“或”:如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。
notnot x布尔“非”:如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。

示例 1:布尔值逻辑运算

# 逻辑与(and)
a = True
b = False
print(a and b)  # 输出:False
print(True and True)  # 输出:True

# 逻辑或(or)
print(a or b)   # 输出:True
print(False or False)  # 输出:False

# 逻辑非(not)
print(not a)    # 输出:False
print(not b)    # 输出:True

# 组合运算(优先级:not > and > or,可加括号改变优先级)
print(not True and False)  # 先算 not True → False,再算 False and False → False
print(not (True and False)) # 先算括号内 → False,再算 not → True
print(True or False and False) # 先算 and → False,再算 or → True

示例 2:数字逻辑运算

# 逻辑与(and):第一个值为真,返回第二个值;第一个为假,返回第一个值
print(10 and 20)   # 10是真 → 返回20
print(0 and 20)    # 0是假 → 返回0
print(-5 and 3.14) # -5是真 → 返回3.14

# 逻辑或(or):第一个值为真,返回第一个值;第一个为假,返回第二个值
print(10 or 20)    # 10是真 → 返回10
print(0 or 20)     # 0是假 → 返回20
print("" or "hello") # 空字符串是假 → 返回"hello"

# 逻辑非(not):返回纯布尔值
print(not 0)       # 0是假 → 返回True
print(not 100)     # 100是真 → 返回False

示例 3:字符串 / 列表参与运算

# 字符串
s1 = "Python"
s2 = ""
print(s1 and s2)  # s1真 → 返回s2(空字符串)
print(s1 or s2)   # s1真 → 返回s1("Python")
print(not s2)     # s2假 → 返回True

# 列表
lst1 = [1,2,3]
lst2 = []
print(lst1 and lst2)  # lst1真 → 返回lst2(空列表)
print(lst2 or lst1)   # lst2假 → 返回lst1([1,2,3])

成员运算符

除了以上的运算符之外,Python 还支持成员运算符,测试实例中包含了一系列的成员,包括字符串,列表或元组。

运算符描述
in如果在指定的序列中找到值返回 True,否则返回 False。
not in如果在指定的序列中没有找到值返回 True,否则返回 False。

示例 1:判断子串是否存在于字符串中

text = "Python是一门优雅的编程语言,Python简单易学"
sub1 = "Python"  # 存在的子串
sub2 = "Java"    # 不存在的子串
sub3 = "优雅"    # 中文子串

# in 运算符(优先使用)
print(sub1 in text)  # True(子串存在)
print(sub2 in text)  # False(子串不存在)
print(sub3 in text)  # True(中文子串也支持)

# not in 运算
print(sub2 not in text)  # True(子串不存在)

示例 2:判断元素是否存在于列表中

lst = [10, 20, "Python", True, 3.14]

# in 运算
print(20 in lst)      	# 数字元素存在 → True
print("Python" in lst) 	# 字符串元素存在 → True
print(False in lst)   	# 布尔元素不存在 → False

# not in 运算
print(30 not in lst)  	# 数字元素不存在 → True
print(3.14 not in lst) 	# 浮点数元素存在 → False

# 嵌套列表(注意:判断的是外层元素)
lst2 = [1, 2, [3, 4]]
print([3,4] in lst2)  	# 嵌套列表是外层元素 → True
print(3 in lst2)      	# 3是内层元素,不在外层 → False

示例 3:判断元素是否存在于元组中

tup = (1, 2, 3, "a", "b")

print(3 in tup)         # 输出:True
print("c" not in tup)   # 输出:True
print("a" in tup)       # 输出:True

示例 4:判断元素是否存在于集合中

s = {1, 2, 3, "apple", "banana"}

print(2 in s)             # 输出:True
print("orange" not in s)  # 输出:True
print("apple" in s)       # 输出:True

示例 5:字典的成员运算默认针对键(key),而非值(value);若要判断值,需用 values() 方法

dic = {
    "name": "小明",
    "age": 18,
    "city": "北京"
}

# 判断键是否存在(默认)
print("name" in dic)    	# 键存在 → True
print("gender" not in dic) 	# 键不存在 → True

# 错误:直接判断值,会判定为False(因为判断的是键)
print("小明" in dic)    	# False

# 正确:判断值是否存在(用values())
print("小明" in dic.values()) 	# True
print(18 in dic.values())    	# True

# 同时判断键值对(用items())
print(("age", 18) in dic.items()) 	# True
print(("city", "上海") in dic.items()) # False

身份运算符

Python3 的身份运算符用于判断两个变量是否指向内存中的同一个对象(即是否占用同一个存储单元),核心有两个:is(是同一个对象)和 is not(不是同一个对象)。如下表:

运算符描述
isis 是判断两个标识符是不是引用自一个对象
is notis not 是判断两个标识符是不是引用自不同对象

示例:

# 简单整数(小整数缓存机制,后面会讲)
a = 10
b = 10
print(f"a的内存地址:{id(a)}")  # 输出:比如 140708467221568
print(f"b的内存地址:{id(b)}")  # 输出:和a相同(140708467221568)
print(a is b)                   # True(指向同一个对象)
print(a == b)                   # True(值相等)

# 列表(即使值相同,也是不同对象)
lst1 = [1, 2, 3]
lst2 = [1, 2, 3]
print(f"lst1的内存地址:{id(lst1)}")  # 输出:比如 2425565991104
print(f"lst2的内存地址:{id(lst2)}")  # 输出:比如 2425565991232(不同)
print(lst1 is lst2)                   # False(不同对象)
print(lst1 == lst2)                   # True(值相等)

# 变量赋值(指向同一个对象)
lst3 = lst1  # lst3 直接引用 lst1 的内存地址
print(f"lst3的内存地址:{id(lst3)}")  # 和 lst1 相同
print(lst1 is lst3)                   # True

# is not 运算符
x = "Python"
y = "Java"
print(x is not y)  # True(不同对象)

运算符优先级

以下表格列出了从最高到最低优先级的所有运算符,相同单元格内的运算符具有相同优先级。

运算符均指二元运算,除非特别指出。

相同单元格内的运算符从左至右分组(除了幂运算是从右至左分组):

运算符描述
(expressions...),[expressions...], {key: value...}, {expressions...}圆括号的表达式
x[index], x[index:index], x(arguments...), x.attribute读取,切片,调用,属性引用
await xawait 表达式
**乘方(指数)
+x, -x, ~x正,负,按位非 NOT
*, @, /, //, %乘,矩阵乘,除,整除,取余
+, -加和减
<<, >>移位
&按位与 AND
^按位异或 XOR
|按位或 OR
in,not in, is,is not, <, <=, >, >=, !=, ==比较运算,包括成员检测和标识号检测
not x逻辑非 NOT
and逻辑与 AND
or逻辑或 OR
if -- else条件表达式
lambdalambda 表达式
:=赋值表达式

注意:Python3 已不支持 <> 运算符,可以使用 != 代替。

更多 Python3 知识,请继续学习后续章节。

  

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号