J'avais toujours supposé que l'interpréteur Python n'a aucune optimisation sans drapeau -O
, mais ce qui suit est un peu étrange:Quelles optimisations Python fait sans les drapeaux -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
Il semble que l'interprète fait un certain pliage sur le modulo de deux constantes de chaîne . Si j'ajoute une variable cependant, il donne un résultat unoptimized:
>>> 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
Qu'est-ce que les optimisations ne Python sans faire le drapeau -O? Et est-il possible de les désactiver? Je voudrais voir à quoi ressemblera Python bytecode non optimisé. Je ne prévois pas de le faire dans n'importe quel environnement de production.