Python Language Variables non locales


Exemple

Python 3.x 3.0

Python 3 a ajouté un nouveau mot-clé appelé nonlocal . Le mot clé nonlocal ajoute un remplacement de portée à la portée interne. Vous pouvez tout lire à ce sujet dans PEP 3104 . Ceci est mieux illustré avec quelques exemples de code. L'un des exemples les plus courants est de créer une fonction pouvant s'incrémenter:

def counter():
    num = 0
    def incrementer():
        num += 1
        return num
    return incrementer

Si vous essayez d'exécuter ce code, vous recevrez une erreur UnboundLocalError car la variable num est référencée avant d'être affectée dans la fonction la plus interne. Ajoutons nonlocal au mixage:

def counter():
    num = 0
    def incrementer():
        nonlocal num
        num += 1
        return num
    return incrementer

c = counter()
c() # = 1
c() # = 2
c() # = 3

Fondamentalement, nonlocal - nonlocal vous permettra d'attribuer des variables dans une portée externe, mais pas une portée globale. Donc, vous ne pouvez pas utiliser nonlocal dans notre fonction de counter , car cela tenterait d’attribuer une portée globale. Essayez-le et vous obtiendrez rapidement une SyntaxError . Au lieu de cela, vous devez utiliser nonlocal dans une fonction imbriquée.

(Notez que la fonctionnalité présentée ici est mieux implémentée en utilisant des générateurs.)