En C/C, les variables statiques jouent un rôle crucial dans la conservation des valeurs lors des invocations de fonctions. Python ne possède cependant pas d’équivalent explicite à ce concept. Par conséquent, comment pouvons-nous implémenter efficacement des variables statiques dans les fonctions Python ?
L'approche idiomatique de Python implique la manipulation de variables au niveau de la classe. Ceci peut être réalisé en définissant une classe qui encapsule la fonction et son état associé. Cependant, dans les scénarios où l'utilisation de classes n'est pas souhaitable, des méthodes alternatives doivent être employées.
Une solution de contournement consiste à exploiter l'espace de noms de la fonction, comme illustré ci-dessous :
def foo(): if not hasattr(foo, "counter"): foo.counter = 0 foo.counter += 1 print("Counter is %d" % foo.counter)
Cet extrait de code définit un compteur dans l'espace de noms de la fonction, garantissant qu'il persiste à travers les appels. Cependant, cela nécessite une initialisation explicite lors de la première invocation.
Pour une approche plus concise et personnalisée, des décorateurs peuvent être employés. Le décorateur suivant crée des variables statiques et les initialise en fonction des arguments de mot-clé spécifiés :
def static_vars(**kwargs): def decorate(func): for k in kwargs: setattr(func, k, kwargs[k]) return func return decorate
Ce décorateur peut être utilisé comme suit :
@static_vars(counter=0) def foo(): foo.counter += 1 print("Counter is %d" % foo.counter)
En exploitant ce décorateur, l'initialisation du compteur le code peut être placé en haut de la définition de la fonction, offrant une implémentation plus intuitive et lisible.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!