Ecco un esempio di quello che voglio dire:Perché `if` è molto più veloce se controllato prima di un'istruzione rispetto a una dichiarazione?
s = """
if x > 10:
x -= 10
else:
x = 0
"""
import timeit
print(timeit.timeit(s, setup="x=5", number=99999999))
Uscite circa 3 secondi sul mio computer, a prescindere dalla configurazione (x=5
vs x=15
, nessuna differenza)
Se dovessi usare molto codice più corto, uno che prima diminuisce x -= 10
e quindi controlla se x < 0
, otterrò risultati molto peggiori:
s = """
x -= 10
if x < 0:
x = 0
"""
import timeit
print(timeit.timeit(s, setup="x=5", number=99999999))
Emette circa 6 secondi, sempre indipendentemente dal fatto che il valore iniziale di x
sia 5
o 15
.
Capisco che sarebbe stato più lento quando x < 10
da quando avevamo prima chiamiamo x -= 10
e quindi impostare x = 0
invece di semplicemente impostando x
una volta.
Il fatto è che il 99% delle volte il valore iniziale di x
nel mio programma è impostato su un numero molto superiore a 10, quindi ho pensato di utilizzare la versione più breve poiché la maggior parte del tempo dovrei vedere nessuna differenza di prestazioni.
Tuttavia, c'è un'enorme differenza di prestazioni anche quando x > 10
, perché questo?
questa temporizzazione si verifica in Python 2.7 pure. – dbliss