2021.2.14 python学习笔记

本文通过实验探讨了Python中逻辑运算符`and`和`or`的优先级及短路逻辑特性。实验表明`and`的优先级高于`or`,`not`的优先级最高。在运算过程中,`or`遇到True则停止计算,`and`遇到False则停止。此外,还展示了如何利用这些特性来优化代码,例如在删除字典元素时避免KeyError。文章最后邀请读者分享更多实现技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验1:

assert False and False or True == True  # 一个True就能导致整个表达式输出True 应该后计算or
assert True or False and False == True  # 交换前后顺序,依然先计算or
assert False and True or False == False # 中间的True无效,应该先算and
assert False or True and False == False # 交换and和or不影响结果
# 用`&` `|` 代替`and` `or`依然能运行

更多的andor连接起来,也是先算and再算or,结论:andor的优先级高,另外逻辑运算符not的优先级比and还要高

实验2:

def func(x):
	print('func', x)
	return 'return from func'

a = True or func('a')
b = False or func('b')  # 显示 func b
c = True and func('c')  # 显示 func c
d = False and func('d')
# 用`&` `|` 代替`and` `or`会发生错误:
# TypeError: unsupported operand type(s) for |: 'bool' and 'str'

print(f'a {a}\n')  # 显示 a True
print(f'b {b}\n')  # 显示 b return from func
print(f'c {c}\n')  # 显示 c return from func
print(f'd {d}\n')  # 显示 d False

print(False or None)  # 显示 None
print(True and 1)     # 显示 1

or遇到一个判断为等价True的值,表达式整体为当前值,丢掉剩余部分。
and遇到一个判断为等价False的值,表达式整体为当前值,丢掉剩余部分。
如果一直没有遇到,则返回最后一个值。
一串or连接的表达式中,只要有一个为True,结果就为True;所有都为False时,表达式才为False
一串and连接的表达式中,只要有一个False,结果就为False;所有都为True时,表达式才为True
合理调整表达式的顺序,可以加快运算速度,避免程序出错。
这种运算称为短路逻辑

实践:删除列表或字典中的元素,如果存在则删除,如果不存在则忽略

s = {1, 'a', None}
print('before', s)              # 显示before {1, 'a', None}
rm2 = 1 in s and not s.remove(1)  # 注意: 判断和移除时的元素要相同
rm3 = 2 in s and not s.remove(2)  # not 是为了方便
print('after ', s)              # 显示after  {'a', None}
print(f'rm2:{rm2}, rm3:{rm3}')  # 显示rm2:True, rm3:False

大家有没有想到更好的实现方法,可以交流一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值