Python中两个Boolean不等时反转其中一个的最简实现方法
问题1:a、b不等时反转a的最短写法
你给出的原始if逻辑完全正确,更短的实现可以用布尔异或运算,仅需1行:
a ^= a != b
原理说明:Python中布尔值是int的子类,True等价于1,False等价于0。a != b返回布尔结果,当结果为True(两者不等)时,a和1异或会直接翻转值;当结果为False(两者相等)时,a和0异或保持原值,和原if逻辑完全一致。
如果优先考虑可读性,你原来的if写法更易懂,适合业务代码场景,追求最短写法的话优先用上述异或实现。
问题2:带额外操作的场景单行简化
要求仅在a被反转(也就是a != b)时执行后续操作,有两种常用实现:
- 可读性最高的常规写法:Python支持将
if块内的多行逻辑放在同一行,用分号分隔即可,不需要依赖高版本特性:
这种写法符合常规编码习惯,团队协作时更推荐。if a != b: a = not a; dosomething(a) - 紧凑表达式写法(Python 3.8及以上版本支持海象运算符):可以利用短路逻辑实现
原理:Python中a != b and (a := not a, dosomething(a))and运算符会短路,只有前面的a != b为True时才会执行后面括号内的逻辑,先反转a再调用函数,完全符合需求。
内容的提问来源于stack exchange,提问作者SwingNoob
相关产品推荐
相关产品推荐

