Ho appena letto questa domanda SE sull'ottimizzazione dei parametri. Mi chiedevo se la compilazione bytecode di Python3 eseguisse la stessa ottimizzazione e questo è apparso not per essere il caso:
>>> def f(a): return 2*a
>>> def g(a): r=2*a; return r
>>> import dis
>>> dis.dis(f)
1 0 LOAD_CONST 1 (2)
2 LOAD_FAST 0 (a)
4 BINARY_MULTIPLY
6 RETURN_VALUE
>>> dis.dis(g)
1 0 LOAD_CONST 1 (2)
2 LOAD_FAST 0 (a)
4 BINARY_MULTIPLY
6 STORE_FAST 1 (r)
8 LOAD_FAST 1 (r)
10 RETURN_VALUE
Il controllo dei flag di compilazione ha mostrato che l'ottimizzazione è attiva:
>>> print(dis.code_info(f))
Name: f
Filename: <stdin>
Argument count: 1
Kw-only arguments: 0
Number of locals: 1
Stack size: 2
Flags: OPTIMIZED, NEWLOCALS, NOFREE
Constants:
0: None
1: 2
Variable names:
0: a
Quindi la mia domanda è: perché Python3 non ottimizza la variabile?
Ps: non sono sicuro che queste domande si adattino meglio a SE o a SO. Ho scelto SE perché la domanda che ha scatenato le mie domande era su SE. Se pensi che questa domanda si adatti meglio a SO, per favore fammelo sapere ...