B1 · Episode 22 · 4:37
Python Function Scope and Variable Isolation
This episode explains how variables defined inside a function are isolated from those outside (scope isolation), demonstrates parameter passing by position and default values, and shows how return values replace function calls in the main program flow.
Source:jmbarbier / peertube.solidev.net · License:CC BY-SA 4.0
Transcript
De mon programme pour retourner vers le programme principal
From my function, returning to the main program
et la valeur que je renvoie c'est la valeur a,
The value I return is the value of variable a
5. Vous voyez que le a
— that is, 5. You can see that this a
qui est là n'a pas changé de valeur.
has not changed in value.
D'accord? Donc c'est ici j'ai un retour, ce a là qui était à l'intérieur,
Understood? So here we have a return: this a inside the function
lui il a changé de valeur, mais il n'existait qu'à l'intérieur de la fonction.
did change its value—but it existed only inside the function.
Là ici, j'ai un retour sortie et ça n'a pas changé les autres valeurs.
Here, I perform a 'return output' operation,
Le a n'a pas changé, le b n'a pas changé.
and other values remain unchanged: a didn’t change, and b didn’t change.
C'est deux. ces deux variables différentes,
These are two distinct variables,
qu'on appelait l'étanchéité en quelque sorte,
which we call ‘scope isolation’,
les variables qui sont définies ou utilisées dans la fonction sont étanches,
meaning variables defined or used inside a function are isolated,
ne jouent pas sur les variables qui sont à l'extérieur.
and do not affect variables outside.
Et donc là ici, ça veut dire que quand j'arrive ici,
So, when execution reaches this point,
je reviens à ma fonction à plantes.
I return to the ‘plantes’ function.
Et je vais remplacer la valeur de la fonction à plantes par la valeur de retour qui
Then, I’ll replace the value of the ‘plantes’ function with its return value,
vaut. 5. Donc là maintenant mon print il va s'exécuter,
which is 5. Now, my print statement will execute,
ça va me faire print 5 3 2. Mon print ici va me faire du 5.
printing ‘5 3 2’—this print outputs 5.
3, 2, on peut aller, et fin du programme.
Then 3, 2 — execution proceeds, and the program ends.
On peut aller vérifier ça sur.
We can verify this,
Notre notebook.
in our notebook.
Exercice 2, on exécute.
Exercise 2 — run the code.
3 2, 5 3 2, c'est ce qu'on avait prévu.
3, 2; then 5, 3, 2 — exactly what we predicted.
Et on peut aller vérifier ça dans Python Tutor.
We can also verify this using Python Tutor.
On a la déclaration de la fonction, on fait une variable a, une variable b,
First, the function is declared; then variables a and b are created,
donc là ils sont ici global frame, c'est le programme principal.
so they reside in the global frame—the main program.
Puis j'appelle ma fonction.
Then I call my function.
Lors de l'appel de ma fonction,
When my function is called,
vous voyez que j'ai un a et un b qui sont différents du a et du b du programme
you’ll see that the a and b here differ from the a and b in the main program.
principal. Donc là j'ai bien mon a et mon b qui sont des nouveaux en quelque sorte.
So here, my a and my b are essentially new variables.
Là, quand je vais le modifier, ça changera dans celui- là,
Now, when I modify it, the change will affect only this one,
mais pas dans celui- là. Et je vais renvoyer la valeur 5 pour afficher le print 5 3
but not that one. Then I’ll return the value 5 to make print display '5 3'.
2. Donc Python Tutor nous aide à faire ceci.
So Python Tutor helps us do exactly this.
À vous de jouer pour.
Now it’s your turn to practice.
Exercice 3. Alors l'exercice 3.
Exercise 3. So, Exercise 3...
Ça se complique un petit peu puisqu'on a des fonctions qui vont appeler d'autres
It gets slightly more complex, since we now have functions calling other functions,
fonctions. Mais finalement, le principe est exactement le même.
but ultimately, the principle is exactly the same.
Il suffit de rester calme, de ne pas s'affoler et de bien écrire tous les détails
and carefully write down all the details you can identify.
qu'on peut avoir.
and carefully write down all the details you can identify.
Donc je pars de là.
I start from here.
Définition de ma fonction 1,
First, define function 1,
définition de la fonction 2, définir une fonction ça fait rien.
then define function 2; defining a function does nothing by itself.
Donc la première exécution réelle de programme, elle est à cet endroit- là.
So the first actual execution of the program happens right here.
Là ici, j'ai un appel, je suis dans mon programme principal,
Here, there’s a function call—I’m currently in the main program,
et j'ai un appel à la fonction couicouic.
and I’m calling the function couicouic.
Avec ici un seul paramètre qui est le paramètre qui vaut 3.
It takes one argument, whose value is 3.
Donc le par position, le paramètre en première position de quick qui vaut 3.
That is, by position, the first parameter of quick has the value 3.
Donc ça nous fait ici un c égale 3.
So here, c equals 3.
Et je vais renvoyer c.
Then I’ll return the value of c.
Pardon. Je passe à la fonction cucu,
Sorry—I move on to the function cucu,
et ensuite j'ai un appel ici à la fonction c égale coucou de c.
and then here I call the function c égale coucou, passing c as its argument.
Donc, la fonction coucou elle est là- haut,
So, the coucou function is up there,
je vais aller sauter à exécuter cette fonction.
I’ll jump to execute this function.
Ça veut dire que je pars de là
This means I start from here,
et je vais exécuter coucou.
and go execute coucou.
Avec quoi est- ce que je vais exécuter coucou?
With what will I execute coucou?
J'ai ici un seul argument qui a été donné, qui est l'argument c,
Here I have only one passed argument: parameter c,
la valeur c. Je peux voir ici sa valeur, c'est 3.
that is, the value c—I can see its value is 3.
Donc là ici, j'ai un appel avec une fonction,
So here we have a function call,
l'appel ici à ce moment- là c'est 3. Donc quand j'arrive sur coucou,
and at this moment, the argument passed is 3. So when I enter coucou,
je n'ai donné des arguments que par position, cet argument- là vaut 3.
I’ve only passed arguments by position—this one equals 3.
Donc ici, ça me fait a
So here, a becomes
égal 3 et puis b n'a pas été donné, donc b va prendre sa valeur par défaut.
3; and b wasn’t provided, so b takes its default value.
B égale 2. Ensuite, je passe à la ligne d'après, A plus égale B,
b equals 2. Then I move to the next line: a += b,
donc A est égal à A plus B.
so a becomes a plus b.
C'est à dire 3 plus 2, 5.
That is, 3 plus 2—equals 5.
Et je renvoie la valeur de a.
Then I return the value of a.
Donc là ici, je renvoie la valeur de a, je renvoie 5.
So here I return a’s value—I return 5.
Ça veut dire que là, je suis
This means I’m now
là et je reviens à l'endroit d'où j'étais parti.
back here, returning to where I started from.