[PYTHON] Portée variable lors de l'utilisation des fonctions internes

Fonctions d'imbrication à utiliser lorsque vous l'utilisez plusieurs fois mais que vous n'avez pas besoin de l'utiliser comme méthode pour sortir.

def hoge():
    def fuga():
        pass

Je me suis demandé quelle serait la gestion des variables lors de son utilisation, alors je l'ai vérifié.

Variables locales

def hoge():
    x = 1
    def fuga():
        x = 3
    fuga()
    print(x)

Résultat d'exécution

hoge()
1

Les variables locales semblent être traitées comme des variables séparées. Naturellement naturel. Cependant, cela peut être changé avec la déclaration nonlocal.

def hoge():
    x = 1
    def fuga():
        nonlocal x
        x = 3
    fuga()
    print(x)

Résultat d'exécution

hoge()
3

Variable de classe

class Sample:
    def __init__(self):
        self.hoge = None

def hoge():
    smp = Sample()
    smp.hoge = "abcde"
    def fuga():
        smp.hoge = "fghijk"
    fuga()
    print(amp.__dict__)

Résultat d'exécution

hoge()
{'hoge': 'fghijk'}

Je me demande si les variables de classe seront traitées globalement.

prime

Vous pouvez l'utiliser pour actualiser votre code lorsque vous souhaitez mettre une autre valeur dans une variable de classe en fonction de la condition

class Sample():
    def __init__(self):
        self.hoge = None
        self.fuga = None

def hoge(list):
    smp = Sample()
    def set_val(val1, val2):
        smp.hoge = val1
        smp.fuga = val2
    if len(list) == 1:
        set_val(list[0], None)
    else:
        set_val(list[0], list[1])
    print(smp.__dict__)

Résultat d'exécution

hoge(['aaaa', 'bbbb'])
{'hoge': 'aaaa', 'fuga': 'bbbb'}

hoge(['cccc'])
{'hoge': 'cccc', 'fuga': None}

Je ne sais pas s'il y a une utilité pour ça!

Recommended Posts

Portée variable lors de l'utilisation des fonctions internes
Portée variable
À propos de la portée des variables. .. ..
Résumé lors de l'utilisation de Fabric
[Azure] Essayez d'utiliser Azure Functions
Précautions lors de l'utilisation de Chainer
Notes utilisant des fonctions triangulaires
Points (personnels) lors de l'utilisation de ctypes
Variables d'environnement lors de l'utilisation de Tkinter
Paramètres de DEBUG lors de l'utilisation de Django
Lors de l'utilisation si et lors de l'utilisation pendant
Structure de fichier lors de l'utilisation d'exigences python sans serveur
Utilisez configparser lors de l'utilisation de l'API