nonlocal
nonlocal
DESCRIPTION.
Précise que la variable fait référence à une variable déclarée dans un bloc parent (fonction parente), et non à une nouvelle variable locale du sous bloc (fonction enfant).
SYNTAXE.
nonlocal variable_a , variable_b , ... , variable_n
nonlocal ⇨ appel de l’instruction [ OBLIGATOIRE ]
variable ⇨ noms des variables [ optionnel ]
REMARQUES.
nonlocal ne doit pas utilisée en dehors de la définition d'une méthode d'une autre méthode (sous fonction).
Toutes variables déclarées à l'intérieur d'une fonction dans un autre fonction (def imbriquée dans def) sont considérées comme locales à cette sous fonction, si elle n'est pas spécifiquement introduite par l'instruction nonlocal.
Les variables déclarées comme nonlocal doivent être présentes dans la fonction parente et avoir été affecté ou créé avant l'appel de la sous fonction où elles sont utilisées en nonlocal. Et elles ne doivent pas avoir été utilisé dans la sous fonction avant cette déclaration.
EXEMPLE AVEC NONLOCAL.
def FNC_Principal ( ) :
kvariable = 7
print ( f"kvariable avant la boucle : { kvariable }." )
print ( )
def FNC_Secondaire ( ) :
for kvaleur in range ( 5 ) :
nonlocal kvariable
kvariable = kvaleur + ( kvaleur**2 )
print ( f"kvariable dans la boucle pour { kvaleur } donne { kvariable }." )
print ( )
FNC_Secondaire ( )
print ( f"kvariable après la boucle : { kvariable }." )
FNC_Principal ( )
retourne :
kvariable avant la boucle : 7.
kvariable dans la boucle pour 0 donne 0.
kvariable dans la boucle pour 1 donne 2.
kvariable dans la boucle pour 2 donne 6.
kvariable dans la boucle pour 3 donne 12.
kvariable dans la boucle pour 4 donne 20.
kvariable après la boucle : 20
Après l'exécution de FNC_Secondaire, la valeur de kvariable est différente. kvariable a bien été modifiée dans FNC_Secondaire.
EXEMPLE SANS NONLOCAL.
def FNC_Principal ( ) :
kvariable = 7
print ( f"kvariable avant la boucle : { kvariable }." )
print ( )
def FNC_Secondaire ( ) :
for kvaleur in range ( 5 ) :
kvariable = kvaleur + ( kvaleur**2 )
print ( f"kvariable dans la boucle pour { kvaleur } donne { kvariable }." )
print ( )
FNC_Secondaire ( )
print ( f"kvariable après la boucle : { kvariable }." )
FNC_Principal ( )
retourne :
kvariable avant la boucle : 7.
kvariable dans la boucle pour 0 donne 0.
kvariable dans la boucle pour 1 donne 2.
kvariable dans la boucle pour 2 donne 6.
kvariable dans la boucle pour 3 donne 12.
kvariable dans la boucle pour 4 donne 20.
kvariable après la boucle : 7.
Après l'exécution de FNC_Secondaire, la valeur de kvariable est identique. kvariable de la fonction FNC_Principal n'a pas été modifiée dans FNC_Secondaire. Bien que les deux variables ait le même nom, il s'agit ici d'objets distincts. Pensez qu'il s'agit, en fait, de FNC_Principal.kvariable et de FNC_Secondaire.kvariable.
Voir les variables pour plus de détails.
Votre aide est précieuse pour améliorer ce site, alors n'hésitez pas à faire part de
Dans la LOGITHEQUE de MON PYTHON PAS A PAS
vous trouvez des suggestions de projets simples et classiques pour
ooo
TESTER - DÉCOUVRIR - PRATIQUER - APPROFONDIR - EXPLORER
ooo
la programmation récréative avec le langage PYTHON 3
avec un exemple de résolution à télécharger pour vous inspirer.