Quand les variables fonction-locales sont-elles créées? Par exemple, dans le code suivant, le dictionnaire d1 est-il créé chaque fois que la fonction f1 est appelée ou seulement une fois lorsqu'elle est compilée?Quand les variables python locales sont-elles créées?
def f1():
d1 = {1: 2, 3: 4}
return id(d1)
d2 = {1: 2, 3: 4}
def f2():
return id(d2)
Est-il plus rapide en général de définir un dictionnaire dans la portée de fonction ou de la définir globalement (en supposant que le dictionnaire est utilisé uniquement dans cette fonction). Je sais qu'il est plus lent de rechercher des symboles globaux que locaux, mais que faire si le dictionnaire est grand?
Beaucoup de code python que j'ai vu semble définir ces dictionnaires globalement, ce qui ne semble pas être optimal. Mais aussi dans le cas où vous avez une classe avec plusieurs méthodes 'encoding', chacune avec un unique (big-ish) dictionnaire de recherche, il est difficile d'avoir le code et les données réparties dans le fichier.
Fait sens. Recommanderiez-vous d'utiliser les attributs function/method/class pour construire paresseusement un dictionnaire lors de son premier appel? – speeedfrk
@speedfrk, dans des conditions très spécifiques: la dict est vraiment coûteuse à construire, il y a une chance raisonnable que vous n'ayez jamais à la construire sur une course donnée, et vous êtes déjà dans une classe (ou une méthode), donc il y a endroit naturel pour "garer" le dict lorsqu'il est construit. –