je me retrouve à l'écriture de code comme ceci relativement souvent:données précalculées coûteux ne sont pertinentes que pour une fonction
_munge_text_re = re.compile("... complicated regex ...")
def munge_text(text):
match = _munge_text_re.match(text)
... do stuff with match ...
Seulement munge_text
utilise _munge_text_re
, donc il serait préférable de le rendre locale à la fonction en quelque sorte, mais si je déplacer la ligne re.compile
à l'intérieur du def
puis il sera évalué chaque fois que la fonction est appelée, en vain l'objectif de la compilation de l'expression régulière.
Existe-t-il un moyen de rendre _munge_text_re
local à munge_text
tout en évaluant son initialiseur une seule fois? L'évaluation unique ne doit pas nécessairement avoir lieu au moment du chargement du module; sur la première invocation de munge_text
serait assez bon. L'exemple utilise une regex, et la plupart du temps j'en ai besoin pour une regex, mais ce peut être n'importe quelle donnée coûteuse à instancier (donc vous ne voulez pas le faire chaque fois que la fonction est appelé) et fixé pour la durée de vie du programme. ConfigParser
viennent également à l'esprit. Crédit supplémentaire: Pour des raisons trop fastidieuses pour entrer ici, mon projet actuel exige une rétrocompatibilité extrême, donc une solution qui fonctionne en Python 2.0 serait meilleure qu'une autre.
... Ce ne pas vraiment se débarrasser de la variable globale ... – zwol
Non, mais il se débarrasse de l'initialisation coûteuse – Malvolio
@Malvolio OP voulait cependant utiliser les locaux. –