Порой бывает интересно, что происходит "под капотом" вашей программы. В python есть замечательный модуль dis, который позволяет посмотреть, как интерпретатор выполняет ваш код.
Создадим файл app.py:
$ python app.py
Программа выведет следующее:
7 0 LOAD_GLOBAL 0 (n)
3 LOAD_CONST 1 (1)
6 BINARY_ADD
7 STORE_GLOBAL 0 (n)
8 10 LOAD_CONST 2 ('%.6d')
13 LOAD_GLOBAL 0 (n)
16 BINARY_MODULO
17 STORE_FAST 2 (response)
10 20 LOAD_FAST 1 (start_response)
23 LOAD_CONST 3 ('200 OK')
26 LOAD_CONST 6 (('Content-Type', 'text/plain'))
29 BUILD_LIST 1
32 CALL_FUNCTION 2
35 POP_TOP
11 36 LOAD_FAST 2 (response)
39 BUILD_LIST 1
42 RETURN_VALUE
Слева приведены строки нашей программы. Здесь видно, что операция инкремента переменной n (строка 7) занимает 4 операции.
Создадим файл app.py:
import dis n = 0 def application(env, start_response): global n n = n + 1 response = "%.6d" % n start_response('200 OK', [('Content-Type', 'text/plain')]) return [response] if '__main__' == __name__: print(dis.dis(application))А теперь в терминале запустите этот файл:
$ python app.py
Программа выведет следующее:
7 0 LOAD_GLOBAL 0 (n)
3 LOAD_CONST 1 (1)
6 BINARY_ADD
7 STORE_GLOBAL 0 (n)
8 10 LOAD_CONST 2 ('%.6d')
13 LOAD_GLOBAL 0 (n)
16 BINARY_MODULO
17 STORE_FAST 2 (response)
10 20 LOAD_FAST 1 (start_response)
23 LOAD_CONST 3 ('200 OK')
26 LOAD_CONST 6 (('Content-Type', 'text/plain'))
29 BUILD_LIST 1
32 CALL_FUNCTION 2
35 POP_TOP
11 36 LOAD_FAST 2 (response)
39 BUILD_LIST 1
42 RETURN_VALUE
Слева приведены строки нашей программы. Здесь видно, что операция инкремента переменной n (строка 7) занимает 4 операции.