【发布时间】:2017-02-27 00:59:09
【问题描述】:
是否有在 python 中进行逻辑异或的首选方法?
例如,如果我有两个变量 a 和 b,并且我想检查至少一个存在但不同时存在,我有两种方法:
方法一(按位运算符):
if bool(a) ^ bool(b):
do x
方法2(布尔运算符):
if (not a and b) or (a and not b):
do x
使用其中任何一种都有固有的性能优势吗?方法 2 似乎更 "pythonic" 但方法 1 对我来说看起来更干净。这个related thread 似乎表明它可能首先取决于a 和b 的变量类型!
有任何强有力的论据吗?
【问题讨论】:
-
其他线程以什么方式不回答您的问题?这两个不等价,如链接线程中所述。
-
“基本”?你的意思是“布尔”,对吧?
-
@TemporalWolf:Python 没有“xor”布尔运算符,我需要在我正在编写的脚本中模拟这种行为。我专门询问两个不同 xor 实现的“pythonic”风格/性能。我知道它们是不等价的。
-
@dizzyf 我会说
def xor(a, b): return (a and not b) or (b and not a)是最pythonic 的方式,然后调用xor(a, b),尽管假设a和b是布尔值。如果需要,将它们包装起来 -
我认为将其标记为重复不是一个好主意,因为用户自己提到了这些方法。他更感兴趣的是应该首选哪个以及为什么。