Maison > développement back-end > Tutoriel Python > Comment puis-je simuler des variables de fonction statiques en Python ?

Comment puis-je simuler des variables de fonction statiques en Python ?

Susan Sarandon
Libérer: 2024-12-04 17:56:11
original
169 Les gens l'ont consulté

How Can I Simulate Static Function Variables in Python?

Équivalent Python des variables de fonction statiques

Problème :
Comment Python implémente-t-il des variables statiques dans des fonctions, similaires à C/C ' s variables membres statiques définies dans la fonction niveau ?

Réponse :

En Python, il n'y a pas d'équivalent direct pour les variables statiques dans les fonctions. Cependant, une fonctionnalité similaire peut être obtenue en utilisant une combinaison de fonctions imbriquées et de fermetures :

def foo():
    def counter():
        if not hasattr(foo, "counter_value"):
            foo.counter_value = 0
        foo.counter_value += 1
        return foo.counter_value
    return counter
Copier après la connexion

Ici, la fonction foo() définit une fonction imbriquée counter(). La fonction externe foo() sert de fermeture à counter(), lui fournissant un espace de noms isolé.

Pour accéder et incrémenter le compteur, vous appelleriez :

counter = foo()
counter()  # Initializes the counter
counter()  # Increments the counter
Copier après la connexion

Approche du décorateur :

Une autre approche consiste à utiliser un décorateur pour créer un statique variable :

def static_vars(**kwargs):
    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
    return foo.counter
Copier après la connexion

Cette syntaxe vous permet d'initialiser et d'accéder plus facilement à la variable statique, mais elle nécessite l'utilisation de foo. préfixe.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal