720 votes

Quel est l’équivalent de Python de variables statiques à l’intérieur d’une fonction ?

Quel est l’équivalent de Python idiomatique du présent code C/C++ ?

plus précisément, comment implémente le membre statique à l’échelle de la fonction, par opposition au niveau de la classe ? Et placer la fonction dans une classe change-t-il quelque chose ?

772voto

Claudiu Points 58398

Un peu renversée, mais cela devrait fonctionner :

Si vous souhaitez que le code d’initialisation de compteur en haut au lieu de la partie inférieure, vous pouvez créer un décorateur :

Utilisez ensuite le code comme ceci :

Il va encore vous obligent à utiliser le `` de préfixe, malheureusement.

253voto

vincent Points 2014

Vous pouvez ajouter des attributs à une fonction et utilisez-la comme une variable statique.

Si vous ne voulez pas configurer la variable en dehors de la fonction, vous pouvez également utiliser pour éviter un exception :

En tout cas les variables statiques sont plutôt rares, et vous devriez trouver un meilleur endroit pour cette variable, très probablement à l’intérieur d’une classe.

238voto

ravwojdyla Points 465

On pourrait également considérer :

Notez que l’exception s’appliquera uniquement examiner une seule fois, il n’y a pas si déclaration.

57voto

Jeremy Banks Points 32470

Autres réponses ont démontré la façon dont vous devriez faire ceci. Voici une façon, que vous ne devriez pas :

Valeurs par défaut sont initialisés uniquement lorsque la fonction est d’abord évaluée, pas chaque fois qu’elle est exécutée, vous pouvez utiliser une liste ou tout autre objet mutable pour stocker des valeurs statiques.

32voto

Riaz Rizvi Points 774

Voici une version entièrement encapsulée qui ne nécessite pas un appel externe d’initialisation :

Membres des objets Python sont stockées dynamiquement dans myobject. `` . Une fonction étant un objet Python, utiliser (1) pour vérifier les premier appel. Remarque :

équivaut à

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X