pin_drop当前位置:知识文库 ❯ 图文

Python逻辑运算符

概述

逻辑运算符用于对布尔值进行逻辑运算,是条件判断和流程控制的核心工具。Python提供了三个逻辑运算符:andornot,它们不仅可以操作布尔值,还能操作任意类型的对象。本节将详细介绍逻辑运算符的用法、短路求值机制以及在实际编程中的应用。


and运算符

and运算符表示逻辑"与",当两个操作数都为True时结果为True,否则为False

布尔运算

代码示例

print(True and True)
print(True and False)
print(False and True)
print(False and False)

输出:

代码示例

True
False
False
False

真值表

A B A and B
True True True
True False False
False True False
False False False

实际应用

代码示例

age = 25
has_ticket = True

if age >= 18 and has_ticket:
    print("可以入场")
else:
    print("不可以入场")

and的返回值规则

and运算符不一定返回布尔值,它返回第一个为假值的操作数,如果都为真值则返回最后一个:

代码示例

print(1 and 2)
print(0 and 2)
print("" and "hello")
print("hello" and "world")
print([] and [1, 2])

输出:

代码示例

2
0

world
[]

or运算符

or运算符表示逻辑"或",当两个操作数中至少一个为True时结果为True,否则为False

布尔运算

代码示例

print(True or True)
print(True or False)
print(False or True)
print(False or False)

输出:

代码示例

True
True
True
False

真值表

A B A or B
True True True
True False True
False True True
False False False

实际应用

代码示例

is_vip = False
has_coupon = True

if is_vip or has_coupon:
    print("可以享受折扣")
else:
    print("原价购买")

or的返回值规则

or运算符返回第一个为真值的操作数,如果都为假值则返回最后一个:

代码示例

print(1 or 2)
print(0 or 2)
print("" or "hello")
print(0 or "")
print([] or [1, 2])
print(None or "default")

输出:

代码示例

1
2
hello

[1, 2]
default

or设置默认值

or运算符常用于设置默认值:

代码示例

name = ""
display_name = name or "匿名用户"
print(display_name)

count = 0
result = count or "无数据"
print(result)

not运算符

not运算符表示逻辑"非",对操作数取反。

布尔运算

代码示例

print(not True)
print(not False)

输出:

代码示例

False
True

真值表

A not A
True False
False True

实际应用

代码示例

is_raining = False

if not is_raining:
    print("天气晴朗,可以出门")
else:
    print("下雨了,记得带伞")

not的返回值

not运算符始终返回布尔值:

代码示例

print(not 1)
print(not 0)
print(not "hello")
print(not "")
print(not [])
print(not [1, 2])

输出:

代码示例

False
True
False
True
True
False

短路求值

短路求值(Short-circuit evaluation)是逻辑运算符的重要特性,也是Python逻辑运算效率的关键。

and的短路

and运算符从左到右求值,如果遇到假值,立即返回该假值,不再计算右边的表达式:

代码示例

def expensive_func():
    print("函数被调用了")
    return True


print(False and expensive_func())
print(True and expensive_func())

输出:

代码示例

False
函数被调用了
True

or的短路

or运算符从左到右求值,如果遇到真值,立即返回该真值,不再计算右边的表达式:

代码示例

def expensive_func():
    print("函数被调用了")
    return True


print(True or expensive_func())
print(False or expensive_func())

输出:

代码示例

True
函数被调用了
True

短路求值的应用

避免除零错误

代码示例

b = 0
a = 10

if b != 0 and a / b > 2:
    print("条件满足")
else:
    print("条件不满足或除数为零")

条件执行

代码示例

debug = True
debug and print("调试信息:程序运行到这里了")

verbose = False
verbose or print("非详细模式,输出简要信息")

安全访问属性

代码示例

obj = None
result = obj and obj.method()

运算符表格

运算符 名称 描述 示例 结果
and 逻辑与 两者都为真则为真 True and False False
or 逻辑或 有一者为真则为真 True or False True
not 逻辑非 取反 not True False

逻辑运算符优先级

优先级 运算符
not
and
or

代码示例

print(True or True and False)
print((True or True) and False)
print(not True or True)
print(not (True or True))

输出:

代码示例

True
False
True
False

代码示例

示例1:用户登录验证

代码示例

username = "admin"
password = "123456"
is_active = True

if username == "admin" and password == "123456" and is_active:
    print("登录成功")
else:
    print("登录失败")

示例2:权限判断

代码示例

is_admin = False
is_editor = True
is_viewer = False

if is_admin or is_editor:
    print("可以编辑内容")
else:
    print("只能查看内容")

if not is_admin:
    print("非管理员,部分功能受限")

示例3:输入验证

代码示例

age = 25
income = 5000
credit_score = 720

eligible = age >= 18 and income >= 3000 and credit_score >= 650

if eligible:
    print("符合贷款条件")
else:
    if not age >= 18:
        print("年龄不足18岁")
    if not income >= 3000:
        print("收入不足3000元")
    if not credit_score >= 650:
        print("信用评分不足650")

示例4:使用or设置默认值

代码示例

def greet(name=None):
    name = name or "访客"
    print(f"你好, {name}!")


greet("Alice")
greet()
greet("")

注意事项

提示返回值不一定是布尔值andor返回的是操作数本身,而不是布尔值。只有not始终返回布尔值。

提示短路求值:利用短路特性可以避免不必要的计算和潜在错误,但也可能导致右边的代码不被执行。

提示优先级not > and > or,复杂逻辑建议使用括号明确优先级。

提示避免双重否定not not x不如直接用bool(x),代码更清晰。

提示与位运算区分and/or/not是逻辑运算,&/|/~是位运算,不要混淆。


小结

本节我们学习了:

  • and运算符:逻辑与,两者都为真时为真,返回第一个假值或最后一个真值

  • or运算符:逻辑或,有一者为真时为真,返回第一个真值或最后一个假值

  • not运算符:逻辑非,取反,始终返回布尔值

  • 短路求值and遇假即停,or遇真即停,可提高效率并避免错误

  • 优先级not > and > or

逻辑运算符是条件判断的基石,理解短路求值机制能帮助你编写更高效、更安全的代码。


练习题

练习1

不运行代码,分析以下表达式的结果:

代码示例

print(1 or 2 and 3)
print(0 or 3 and 4)
print(not 0 or 1 and 2)
print(1 and 2 or 3 and 4)

练习2

编写一个程序,判断一个年份是否为闰年。使用逻辑运算符将条件合并为一个表达式:能被4整除且不能被100整除,或者能被400整除。

常见问题

Python中and和or运算符的返回值一定是布尔值吗?

不一定。and和or运算符返回的是操作数本身,而不是布尔值。and返回第一个为假值的操作数,如果都为真值则返回最后一个;or返回第一个为真值的操作数,如果都为假值则返回最后一个。只有not运算符始终返回布尔值。

什么是短路求值?有什么实际用途?

短路求值是逻辑运算符的重要特性。and运算符从左到右求值,遇到假值立即返回,不再计算右边表达式;or运算符遇到真值立即返回,不再计算右边表达式。实际用途包括:避免除零错误、条件执行、安全访问属性等,可以提高程序效率并避免潜在错误。

Python逻辑运算符的优先级是什么?

Python逻辑运算符的优先级从高到低为:not > and > or。在复杂的逻辑表达式中,建议使用括号来明确优先级,提高代码可读性。例如:True or True and False 等价于 True or (True and False),结果为True。

如何使用or运算符设置默认值?

or运算符返回第一个为真值的操作数,因此可以用于设置默认值。例如:name = user_input or "默认值",当user_input为空字符串、None、0等假值时,name将取"默认值"。这是Python中常用的简洁写法。

逻辑运算符and/or/not与位运算&/|/~有什么区别?

and/or/not是逻辑运算符,用于布尔逻辑运算和短路求值,可以操作任意类型的对象;&/|/~是位运算符,用于对整数的二进制位进行按位运算,只能操作整数。两者不要混淆使用。

标签: 逻辑运算符 and运算符 or运算符 not运算符 短路求值 Python基础 条件判断 布尔运算

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: Python赋值运算符 下一篇: Python位运算符

poll相关推荐

作者头像 智能小晨 python

Python类型转换详解

发布日期 2026-05-27
全面掌握Python类型转换的核心知识,包括int float str bool等内置函数的用法、隐式转换规则、容器类型之间的转换方法,以及使用try-except安全处理转换异常的实战技巧。通过丰富的代码示例,帮助你写出更健壮的Python代码。
作者头像 智能小晨 python

Python字符串类型详解

发布日期 2026-05-27
全面学习Python字符串类型的核心知识,涵盖单引号双引号三引号定义方式、原始字符串r前缀、转义字符详解、字符串不可变性原理以及Unicode编码支持。
作者头像 智能小晨 python

Python布尔类型详解

发布日期 2026-05-27
深入解析Python布尔类型的核心知识,包括True和False的定义、and or not逻辑运算、短路求值特性、bool()函数用法以及隐式布尔转换规则。通过丰富的代码示例,帮助你掌握Python布尔类型的实际应用,写出更优雅的条件判断代码。
作者头像 智能小晨 python

Python复数类型complex详解

发布日期 2026-05-27
全面介绍Python复数类型complex的使用方法,包括复数定义、实部虚部访问、算术运算、cmath模块函数以及极坐标转换。掌握复数在科学计算和工程领域的应用。