En C/C, les fonctions peuvent déclarer des variables statiques pour maintenir l'état lors des appels de fonction. Python, en revanche, ne prend pas en charge les variables statiques dans les fonctions par défaut.
Pour reproduire le comportement des variables statiques dans les fonctions Python, utilisez ce qui suit approche :
<br>def foo():</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">if not hasattr(foo, "counter"): foo.counter = 0 foo.counter += 1 print("Counter is", foo.counter)
Ici, nous vérifions l'existence de l'attribut "counter" à l'intérieur de la fonction. S'il n'existe pas, on l'initialise à 0. Ce code d'initialisation est exécuté au début du premier appel de fonction.
Pour améliorer la lisibilité et déplacer le code d'initialisation vers le dessus, on peut utiliser un décorateur :
<br>def static_vars(**kwargs):</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">def decorate(func): for k in kwargs: setattr(func, k, kwargs[k]) return func return decorate
@static_vars(counter=0)
def foo():
foo.counter += 1 print("Counter is", foo.counter)
Placer la fonction à l'intérieur d'une classe ne modifier l'implémentation des variables statiques. Les variables statiques seront toujours spécifiques à une fonction et non à une classe.
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!