[wiki: Portées]
—-
Résolution des noms : la règle LEGB
On peut réutiliser le même nom à différents endroits du code, la plupart du temps pour désigner des variables et des valeurs différentes.
Résoudre un nom, c’est à dire trouver sans ambiguité à quelle variable il fait référence, consiste à chercher cette variable dans l’ordre suivant, dit LEGB :
1. Local : variables locales de la fonction courante.
1. Enclosing : variables locales des fonctions englobantes (defs et lambdas).
1. Global : variables globales du module courant.
1. Built-in : variables prédéfinies (module builtin).
—-
Assignation à un nom
Par défaut, toute assignation à un nom crée une variable locale, si elle n’existe pas déjà.
#!python
x = 1
def px():
print x
def f1():
x = 2
px()
def f2():
def px():
print x
x = 3
px()
f1()
f2()
#!html
<pre style="margin-left:20px;margin-right:20px;border: 1px solid palegoldenrod;padding:4px;background-color:lightyellow">
1
3
</pre>
—-
Déclaration globales
Le mot clé global permet de préciser qu’un nom désigne une variable globale, c’est à dire au niveau du module courant.
#!python
x = 1
def px():
print x
def f1():
global x
x = 2
px()
f1()
#!html
<pre style="margin-left:20px;margin-right:20px;border: 1px solid palegoldenrod;padding:4px;background-color:lightyellow">
2
</pre>
—-