Du coup ça veut dire qu'on peut avoir plusieurs espaces locaux, chacun étant locaux à une fonction précise ?
```python
def func1():
a = 2
print(f"f1 : {a}")
def func2():
print(f"f2 : {a}")
func2()
a = 1
func1()
```
La on est bien d'accord que j'ai :
* **espace global** dans lequel `a` vaut 1
* **espace local de la fonction** `func1` dans lequel `a` vaut 2
* **espace local de la fonction** `func2` dans lequel `a` n'existe pas.
C'est ça ?
Baptiste KUMALA
14 novembre 2024
Résolue
1 réponse
Accès aux variables dans les fonctions imbriquées
Bonjour,
je me posais la question suivante.
Si je définis 3 fonctions imbriquées, on va dire f1, f2 et f3 comme ci :
```
f1
f2
f3
```
Est-ce que la fonction f3 a accès aux variables définies en f2 et f1 ?
Merci
Espace global et local
Les variables qui sont définies à l'intérieur d'une fonction appartiennent uniquement à la fonction.
deffonction():a=10a=5
Dans cet exemple, on a une fonction dans laquelle on assigne la valeur 10 à la variable a, et en dehors de la fonction, on assigne la valeur 5 à la variable a.
Si par la suite on appelle la fonction et qu'on affiche la valeur de a avec print, vous voyez que la valeur n'a pas changé malgré l'assignation que l'on fait dans la fonction.
>>>fonction()>>>print(a)5
Donc a est toujours égale à 5, on ne l'a pas modifiée.
Par défaut, quand on écrit une ligne dans notre script, on dit qu'on est dans l'espace global.
Dans l'exemple précédent, l'espace global correspond à la fonction exemple et à la variable a.
Dans l'espace global du script, on peut faire un print de la variable a ou appeler la fonction exemple sans provoquer d'erreur : Python ne va pas nous dire que cette variable n'est pas définie.
À l'intérieur de la fonction exemple, on crée un autre espace, local à la fonction. On parle d'espace local.
Les variables créées à l'intérieur de cet espace ne sont accessibles qu'à l'intérieur de la fonction, donc à l'intérieur de cet espace local.
defexemple():b=5a=5
Dans le code ci-dessus, à l'intérieur de la fonction exemple, on peut sans problème écrire print(b), ce qui va afficher le nombre 5. Par contre, si on essaye de faire print(b) en dehors de la fonction exemple, il y aura une erreur car b n'existe qu'à l'intérieur de la fonction. En dehors de la fonction, b n'est pas définie.
L'inverse, en revanche, est possible. Une variable qui est définie dans l'espace global est accessible à l'intérieur d'une fonction.
À l'intérieur de la fonction exemple, je peux accéder à la variable a même si elle est définie à l'extérieur de cette même fonction, et la valeur 5 sera bien affichée.
!!!warning
Si on reprend l'exemple du début, si on assigne une valeur à la variable a à l'intérieur de la fonction, on n'écrase pas la variable globale. On crée simplement une variable locale qui se retrouve à avoir le même nom que la variable dans l'espace global, mais il s'agit bien de deux variables différentes, une variable locale à la fonction et une variable globale au script.
!!!
Il y a obligatoirement un espace global : dès qu'on écrit une ligne de code, elle est obligatoirement dans cet espace global
On peut par la suite créer plusieurs espaces locaux : si on crée plusieurs fonctions, elles vont chacune avoir leur espace local
Les variables définies à l'intérieur d'une fonction ne sont pas disponibles en dehors de la fonction.
On peut accéder à une variable globale, définie à l'extérieur de la fonction, à l'intérieur des fonctions.
Les prochaines parties comportent plusieurs quizz et exercices qui vont vous permettre de tester cette notion d'espaces en vous montrant ce que vous pouvez faire avec les variables, et comment elles sont définies à l'intérieur de ces différents espaces.