Durante l'esecuzione di un integratore numerico, ho notato una notevole differenza in termini di velocità a seconda di come ho estratto il valore del campo in un dizionarioPerché la dict.get (chiave) correre più lento di dict [tasto]
import numpy as np
def bad_get(mydict):
'''Extract the name field using get()'''
output = mydict.get('name', None)
return output
def good_get(mydict):
'''Extract the name field using if-else'''
if 'name' in mydict:
output = mydict['name']
else:
output = None
return output
name_dict = dict()
name_dict['name'] = np.zeros((5000,5000))
Sul mio sistema, ho notato quanto segue differenza (usando ipython)
%%timeit
bad_get(name_dict)
The slowest run took 7.75 times longer than the fastest. This could mean that an intermediate result is being cached.
1000000 loops, best of 3: 247 ns per loop
Rispetto al
%%timeit
good_get(name_dict)
1000000 loops, best of 3: 188 ns per loop
Questa potrebbe sembrare una piccola differenza, ma in alcuni array la differenza sembra essere ancora più drammatica. Che cosa causa questo comportamento, ed è in qualche modo che dovrei modificare il mio uso della funzione get()
?
Buona osservazione. Se cerchi la velocità, puoi sostituire 'mydict.get (" nome ")' in 'mydict [" nome "]' in try/except block, catturando 'KeyError' e assegnando' None' lì. –