Portée des variables

Portée des variables

Lorsque l'on écrit une fonction, on distingue le local (les instructions de la fonctions de la fonction) du global (les instructions du programme appelant - le  contexte, le programme principal)

Le principe de modularité en programmation voudrait que celui qui manie la fonction ignore comment elle a été écrite donc ignore tout du nom des variables utilisées dans la fonction (variables locales), celui qui écrit la fonction ignore tout du contexte donc du nom des variables du programme principal (variables globales)

Les variables paramètres permettent le transfert des données du contexte à la fonction et les valeurs suivants le mot return le transfert inverse des données de la fonction au programme principal.

Par exemple, on aura

def NomFonction(a,b):

    instructions

a est le nom d'une variable

Appel : B=f(x,y)

où B est le nom d'une variable

et x,y soit des valeurs, soit des variables.

La transmission des valeurs correspond à a=x;b=y

Notez que si x et y sont des valeurs, des variables non modifiables (variables simples, chaînes, tupples)  ou des variables modifiables (listes), les affectations a=x ou b=y n'ont pas le même effet.

Dans la pratique du langage Python

  •  les variables locales et les variables paramètres ne sont connues que par la fonction. On peut utiliser leur nom dans le programme principal sans aucune interférence avec le local.
  •  les variables globales peuvent être utilisées dans la fonction, mais si il y a une variable locale de même nom, c'est la variable locale qui sera considérée dans la fonction

Illustration

a=[1,2,3,4];b=1;c=10;d=20

def Test():

    a[0]=0 ; print(a)

#    b=b+1; provoque une erreur

    d=100;print(d)

    f=c;print(f)    

    e=0

On appelle la fonction

Test() qui affichera

  • [0, 2, 3, 4] (correspondant à la valeur de a dans la fonction)
  • 100 (valeur de d dans la fonction)
  • 10 (valeur de f dans la fonction)

print("Global : ","a=",a,";   b=",b," ; c=",c," ; d=",d) qui affichera :

  • Global :  a= [0, 2, 3, 4]  ;   b= 1  ; c= 10  ; d= 20

print(e) qui affichera :

  • NameError: name 'e' is not defined

Comme on peut le voir,

  •  Les variables globales ont été prises en compte dans la fonction (f=c, f(locale) prend bien la valeur 10) et a, liste, a été modifiée.
  •  Les variables locales sont inconnues dans l'espace global (nom 'e' non définie)
  •  Les modifications sur d ne sont pas retenues car d est une variable locale, sans lien avec le d du global.
  •  et b=b+1 provoque une erreur car b est considérée comme une variable locale et donc on ne peut calculer b+1 puisque b n'a pas encore de valeur (alors que b, variable globale, vaut 1).

moralité :  Éviter l'usage des variables globales.
 

Fichier Joint: 

Ajouter un commentaire

Plain text

  • Aucune balise HTML autorisée.
  • Les adresses de pages web et de courriels sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Saisir les caractères affichés dans l'image.