gpt4 book ai didi

Python XOR 首选项 : bitwise operator vs. bool 运算符

转载 作者:太空宇宙 更新时间:2023-11-03 16:03:19 24 4
gpt4 key购买 nike

是否有在 python 中进行逻辑异或的首选方法?

例如,如果我有两个变量 a 和 b,并且我想检查至少一个变量存在但不是两者都存在,我有两种方法:

方法一(按位运算符):

if bool(a) ^ bool(b):
do x

方法 2( bool 运算符):

if (not a and b) or (a and not b):
do x

使用其中任何一个是否有固有的性能优势?方法 2 看起来更“Pythonic”,但方法 1 对我来说看起来更干净。这个related thread似乎表明它可能取决于变量类型 ab排在第一位!

有什么强有力的论据吗?

最佳答案

实现它的另一种方法是使用 any()all() ,例如:

if any([a, b]) and not all([a, b]):
print "Either a or b is having value"

但根据性能,结果如下:

  1. 使用 any()all():每个循环 0.542 usec

    moin@moin-pc:~$ python -m "timeit" "a='a';b='b';" "any([a, b]) and not all([a, b])"
    1000000 loops, best of 3: 0.542 usec per loop
  2. 使用 bool(a) ^ bool(b):每个循环 0.594 usec

    moin@moin-pc:~$ python -m "timeit" "a='a';b='b';" "bool(a) ^ bool(b)"
    1000000 loops, best of 3: 0.594 usec per loop
  3. 使用(不是 a 和 b)或(a 和不是 b):每个循环 0.0988 usec

    moin@moin-pc:~$ python -m "timeit" "a='a';b='b';" "(not a and b) or (a and not b)"
    10000000 loops, best of 3: 0.0988 usec per loop

显然,您的(不是a和b)或(a而不是b)效率更高。效率大约是其他产品的 6 倍。

<小时/>

andor 的更多风格比较:

  • 使用a而不是b或b而不是a(如TemporalWolf指出):每个循环0.116 usec

    moin@moin-pc:~$ python -m "timeit" "a='a';b='b';" "a and not b or b and not a"
    10000000 loops, best of 3: 0.116 usec per loop
  • 使用(a或b)而不是(a和b):每个循环0.0951 usec

    moin@moin-pc:~$ python -m "timeit" "a='a';b='b';" "(a or b) and not (a and b)"
    10000000 loops, best of 3: 0.0951 usec per loop
  • 注意:此性能是根据 ab 的值作为 str 进行评估的,并且是相关的关于 __nonzero__/__bool__/__or__ functions 的实现,如 viraptor 提到的在评论中。

    关于Python XOR 首选项 : bitwise operator vs. bool 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40096616/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com