在python编程语言中,or是核心逻辑运算符之一,主要用于处理布尔值的逻辑或运算,同时它也支持非布尔值的运算场景,其独特的短路特性是很多开发者需要重点掌握的内容。

or运算符的基本含义
or运算符的作用是对两个或多个表达式进行逻辑或运算,只要参与运算的表达式中有一个结果为真,整个or运算的结果就为真。在python中,布尔值True代表真,False代表假,or运算的基本规则如下:
- 当左侧表达式为
True时,无论右侧表达式结果是什么,整个or运算结果都为True - 当左侧表达式为
False时,or运算的结果由右侧表达式的结果决定
我们可以通过简单的代码示例验证这个规则:
# 基础or运算示例 print(True or True) # 输出True print(True or False) # 输出True print(False or True) # 输出True print(False or False) # 输出False
or运算符的短路特性
短路特性是or运算符的重要特点,指的是当or运算的左侧表达式结果已经能够确定整个运算的结果时,python解释器不会再去执行右侧的表达式,直接返回左侧的结果。这个特性可以减少不必要的计算,提升代码执行效率。
短路特性的表现
当or左侧表达式为True时,整个运算结果已经确定为True,此时右侧表达式不会被执行,我们来看一个示例:
def left_func():
print("左侧函数被执行")
return True
def right_func():
print("右侧函数被执行")
return False
# 调用or运算
result = left_func() or right_func()
print("运算结果:", result)
运行上述代码,输出结果为:
左侧函数被执行 运算结果: True
可以看到右侧的right_func函数并没有被执行,这就是or的短路特性。如果左侧表达式为False,则右侧表达式会被执行,例如:
def left_func():
print("左侧函数被执行")
return False
def right_func():
print("右侧函数被执行")
return True
result = left_func() or right_func()
print("运算结果:", result)
运行结果为:
左侧函数被执行 右侧函数被执行 运算结果: True
非布尔值的or运算短路
or运算符不仅支持布尔值运算,也支持其他类型的值运算,此时短路特性依然生效,返回的是第一个为真的表达式的值,而不是强制转换为布尔值。python中判断一个值是否为真的规则是:非零数值、非空字符串、非空容器等都被视为真,零、空字符串、空容器、None等被视为假。
示例代码如下:
# 非布尔值or运算示例
print(10 or 20) # 10为真,返回10,不执行右侧
print(0 or 20) # 0为假,返回右侧的20
print("" or "hello") # 空字符串为假,返回"hello"
print([1,2] or []) # 非空列表为真,返回[1,2]
print(None or "test") # None为假,返回"test"
or运算符的常见使用场景
多条件判断
在条件判断中,or常用于判断多个条件中是否至少有一个成立,例如判断一个数是不是正数或者零:
num = 5
if num > 0 or num == 0:
print("该数是非负数")
设置默认值
利用or的短路特性,可以快速给变量设置默认值,当变量为假时,使用默认值:
# 设置默认值示例
name = input("请输入姓名:") or "匿名用户"
print("欢迎你,", name)
如果用户输入为空字符串,input返回空字符串为假,or运算会返回右侧的"匿名用户"作为默认值。
注意事项
使用or运算符时需要注意,不要混淆逻辑或和按位或运算符|,前者是逻辑运算,后者是对整数的二进制位进行运算。另外在短路特性场景下,如果右侧表达式有副作用(比如修改全局变量、执行IO操作等),需要注意左侧表达式的结果是否会影响这些副作用的执行。