Анализ байт-кода Python - PullRequest
       9

Анализ байт-кода Python

0 голосов
/ 24 октября 2019

В следующем байт-коде Python я хотел бы понять, почему значение i не увеличивается сразу перед JUMP_ABSOLUTE?

>>> import dis
>>> dis.dis("""for i in range(4):
...     print(i)
... """)
  1           0 SETUP_LOOP              24 (to 26)
              2 LOAD_NAME                0 (range)
              4 LOAD_CONST               0 (4)
              6 CALL_FUNCTION            1
              8 GET_ITER
        >>   10 FOR_ITER                12 (to 24)
             12 STORE_NAME               1 (i)

  2          14 LOAD_NAME                2 (print)
             16 LOAD_NAME                1 (i)
             18 CALL_FUNCTION            1
             20 POP_TOP
             22 JUMP_ABSOLUTE           10
        >>   24 POP_BLOCK
        >>   26 LOAD_CONST               1 (None)
             28 RETURN_VALUE

1 Ответ

1 голос
/ 24 октября 2019

Эволюция i просто выполняется в строке 10, вызывая магический метод __next__ из range.

...