От эта страница, мы знаем, что:
Связанные сравнения выполняются быстрее, чем при использовании оператора
and. Напишитеx < y < zвместоx < y and y < z.
Однако я получил другой результат, тестирующий следующие фрагменты кода:
$ python -m timeit "x = 1.2" "y = 1.3" "z = 1.8" "x < y < z"
1000000 loops, best of 3: 0.322 usec per loop
$ python -m timeit "x = 1.2" "y = 1.3" "z = 1.8" "x < y and y < z"
1000000 loops, best of 3: 0.22 usec per loop
$ python -m timeit "x = 1.2" "y = 1.3" "z = 1.1" "x < y < z"
1000000 loops, best of 3: 0.279 usec per loop
$ python -m timeit "x = 1.2" "y = 1.3" "z = 1.1" "x < y and y < z"
1000000 loops, best of 3: 0.215 usec per loop
Кажется, что x < y and y < z быстрее, чем x < y < z.  Почему?
После поиска некоторых сообщений на этом сайте (например, этот), я знаю, что "оценивается только один раз" является ключом для x < y < z, однако я все еще смущенный. Для дальнейшего изучения я разобрал эти две функции, используя dis.dis:
import dis
def chained_compare():
        x = 1.2
        y = 1.3
        z = 1.1
        x < y < z
def and_compare():
        x = 1.2
        y = 1.3
        z = 1.1
        x < y and y < z
dis.dis(chained_compare)
dis.dis(and_compare)
И результат:
## chained_compare ##
  4           0 LOAD_CONST               1 (1.2)
              3 STORE_FAST               0 (x)
  5           6 LOAD_CONST               2 (1.3)
              9 STORE_FAST               1 (y)
  6          12 LOAD_CONST               3 (1.1)
             15 STORE_FAST               2 (z)
  7          18 LOAD_FAST                0 (x)
             21 LOAD_FAST                1 (y)
             24 DUP_TOP
             25 ROT_THREE
             26 COMPARE_OP               0 (<)
             29 JUMP_IF_FALSE_OR_POP    41
             32 LOAD_FAST                2 (z)
             35 COMPARE_OP               0 (<)
             38 JUMP_FORWARD             2 (to 43)
        >>   41 ROT_TWO
             42 POP_TOP
        >>   43 POP_TOP
             44 LOAD_CONST               0 (None)
             47 RETURN_VALUE
## and_compare ##
 10           0 LOAD_CONST               1 (1.2)
              3 STORE_FAST               0 (x)
 11           6 LOAD_CONST               2 (1.3)
              9 STORE_FAST               1 (y)
 12          12 LOAD_CONST               3 (1.1)
             15 STORE_FAST               2 (z)
 13          18 LOAD_FAST                0 (x)
             21 LOAD_FAST                1 (y)
             24 COMPARE_OP               0 (<)
             27 JUMP_IF_FALSE_OR_POP    39
             30 LOAD_FAST                1 (y)
             33 LOAD_FAST                2 (z)
             36 COMPARE_OP               0 (<)
        >>   39 POP_TOP
             40 LOAD_CONST               0 (None)
Кажется, что x < y and y < z имеет менее выраженные команды, чем x < y < z. Должен ли я считать x < y and y < z быстрее, чем x < y < z?
Протестировано с Python 2.7.6 на процессоре Intel (R) Xeon (R) E5640 @2,67 ГГц.
