Я всегда предполагал, что интерпретатор Python не делал оптимизаций без флага -O
, но следующее немного странно:
>>> def foo():
... print '%s' % 'Hello world'
...
>>> from dis import dis
>>> dis(foo)
2 0 LOAD_CONST 3 ('Hello world')
3 PRINT_ITEM
4 PRINT_NEWLINE
5 LOAD_CONST 0 (None)
8 RETURN_VALUE
Похоже, что интерпретатор выполняет некоторое сворачиваниепо модулю двух строковых констант.Однако, если я добавлю переменную, это даст неоптимизированный результат:
>>> def foo():
... s = 'Hello world!'
... print '%s' % s
...
>>> dis(foo)
2 0 LOAD_CONST 1 ('Hello world!')
3 STORE_FAST 0 (s)
3 6 LOAD_CONST 2 ('%s')
9 LOAD_FAST 0 (s)
12 BINARY_MODULO
13 PRINT_ITEM
14 PRINT_NEWLINE
15 LOAD_CONST 0 (None)
18 RETURN_VALUE
Какие оптимизации выполняет Python без флага -O?И есть ли способ их отключить?Я хотел бы посмотреть, как будет выглядеть неоптимизированный байт-код Python.Я не планирую делать это в любой среде производственного типа.