Lors de l'exécution d'un intégrateur numérique, j'ai remarqué une différence notable dans la vitesse en fonction de la façon dont j'extraire la valeur du champ dans un dictionnairedict.get (clé) exécuter plus lentement que dict [key]
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))
Sur mon système, je remarque la différence suivante (en utilisant 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
Par rapport à
%%timeit
good_get(name_dict)
1000000 loops, best of 3: 188 ns per loop
Cela peut sembler une petite différence, mais pour certains tableaux, la différence semble être encore plus dramatique. Qu'est-ce qui cause ce comportement, et y a-t-il un moyen de modifier mon utilisation de la fonction get()
?
Bonne observation. Si vous chassez pour la vitesse, vous pouvez remplacer 'mydict.get ("nom")' 'à mondict [ "nom"]' dans try/except, attrapant '' KeyError' et l'attribution none' là. –