让我们考虑一下我想传递一组某些对象的状态的特定情况。为了方便和灵活(或者可能是任意的),我选择使用二进制状态,然后使用按位或“|”连接起来在我传递它们之前:
status_a = 0b1
status_b = 0b10
status_c = 0b100
statuses_to_pass = status_a | status_c # 0b101
然后我意识到在这种情况下我也可以使用加法算术运算符“+”:
status_a | status_c == status_a + status_c
# 0b101 == 0b101 --> True
当然,当状态是两个的正幂时,这是正确的;还有一些其他注意事项,例如:
status_a | status_c | status_c == status_a + status_c + status_c
# 0b101 == 0b1001 --> False
但让我们假设我不超出限制 - 是否有任何理由说明按位运算符比算术运算符更好? Python 引擎盖下的东西?哪个更快?或者可能还有其他我没有想到的副作用?
最佳答案
timeit
的实验表明在这些情况下添加速度更快:
import timeit
import statistics
times = {"+": [], "|": []}
for x in range(10):
for y in range(x+1, 10):
for op in "+|":
t = timeit.timeit(stmt="x {} y".format(op), setup="x=2**{};y=2**{}".format(x, y))
times[op].append(t)
statistics.mean(times["+"]) # 0.029464346377385986
statistics.mean(times["|"]) # 0.04432822428643703
关于python - 按位或 "|"与 Python 中两个正幂的加法 "+",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55498263/