или и |это совсем не одинаковые операторы.
or
выполняет логическое сокращение или тогда, когда |
выполняет битовый код или
result = expression1 or expression2
идентично
if bool(expression1):
result = expression1
else:
result = expression2
поэтому выражение2 даже не вычисляется, если выражение1 истинно
, тогда как:
result = expression1 |Выражение2
выполняет немного или оба значения. поэтому expression1 и expression2 должны давать целые числа. (Истина интерпретируется как целое число 1)
посмотрите, например, на следующий вывод
In [8]: "{0:b}".format(0b100 | 0b001)
Out[8]: '101'
In [9]: "{0:b}".format(0b100 or 0b001)
Out[9]: '100'
Так что я согласен с вашим предположением, что обычно or
должно быть быстрее, чем |
, ночтобы быть на 100% уверенным, что вам пришлось смотреть на байт-код.
Я ожидаю, что ваше предположение будет верным, если вы будете время от времени повторять операции. скажем, время их несколько сотен раз в разное время дня. для обоих.
Проблема с timeit состоит в том, что вы запускаете python в ОС, которая запускает несколько процессов и где у вас нет 100% предсказуемой среды.
Так что я будуочень осторожно интерпретировать крошечные различия во времени выполнения.