LangagePortees

[wiki: Portées]

PageOutline

—-

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>

—-