B1 · 第21集 · 4:49
Python函数执行过程
本集讲解Python函数的执行流程,包括变量作用域、参数传递和内存分配。
来源:jmbarbier / peertube.solidev.net · 许可:CC BY-SA 4.0
字幕
Donc on peut voir en fait l'intégralité du parcours d'une fonction,
因此,我们实际上可以观察到一个函数的完整执行过程,
du parcours du programme en le faisant pas à pas avec cet outil- là.
即通过这个工具逐步运行程序的过程。
Vous pouvez aller le faire avec Python Tutor directement si vous voulez voir à peu
如果您想在Python Tutor上大致看看效果,
près ce que ça donne sur Python Tutor.
可以马上去操作一下。
Voilà le site Python tutor.
这就是Python Tutor网站。
Vous, ce qui vous intéresse, c'est Python.
您关注的是Python语言。
Vous pouvez prendre le code qui vous intéresse.
您可以输入自己感兴趣的代码,
ou que vous êtes en train de faire ou que vous êtes en train de déboguer,
比如正在编写或调试的代码,
le taper là dedans, le copier coller là dedans.
或者直接复制粘贴进去。
Et on va lui demander de visualiser l'exécution.
然后请它可视化执行过程。
On peut lui demander, il a quelques petites options sur la
它还提供一些显示方式的小选项,
manière de l'afficher.
您可以自行选择。
Donc là, on peut par exemple lui demander d'afficher toutes les étapes,
例如,我们可以要求它显示所有步骤,
y compris celles qui étaient faites
包括那些已经完成的步骤。
passées. Et voilà, et là on retrouve en fait nos différentes étapes,
看,这样我们就再次看到了各个执行步骤,
avec là ici un affichage un petit peu différent,
不过这里的显示方式略有不同:
puisqu'il va garder en mémoire les fonctions qui ont été faites dans le passé.
它会保留在过去调用过的函数信息。
donc c'est pas exactement le même mode d'affichage que celui que j'ai fait tout à
所以它的显示模式和我刚才演示的不完全一样,
l'heure mais c'est la même fonction vous voyez les mêmes étapes donc ça peut être
但功能相同,您看到的执行步骤也一致,
très pratique pour voir ce qui se passe quand vous faites exécuter votre Python.
这对理解Python代码的运行过程非常有帮助。
Donc ça c'était l'exercice 1,
以上是练习1,
on l'a fait ensemble,
我们一起完成了。
maintenant on peut repasser sur l'exercice 2.
现在我们进入练习2。
Et cette fois, c'est à vous de faire.
这次由您来独立完成。
Et donc, à chaque fois.
每次都是如此。
Je vais. Donner l'exo, vous le faites à la main,
我来发练习题,你们手写完成。
enfin on va le faire ensemble après en correction en mode papier,
最后,我们再一起用纸笔方式讲解订正。
puis ensuite Python Tutor, puis ensuite ExoSur.
接着用 Python Tutor,再之后是 ExoSur。
Donc vous avez six exos, du plus simple on va dire au plus compliqué,
你们共有六道练习题,难度从最简单到最难。
le dernier étant particulièrement costaud, on va dire ça comme ça.
最后一题尤其有挑战性,我们就这么形容吧。
A few moments later.
稍等片刻。
Alors, pour la correction de cet exercice là, exercice deux.
那么,这道题——第二题的订正。
Donc on démarre, démarrage du programme, on a une définition de fonction,
我们开始运行程序:首先定义一个函数,
on va directement ici.
我们直接跳到这里。
Là, on a deux variables qui sont créées, a b égale 3 2,
这里创建了两个变量:a 和 b,分别赋值为 3 和 2。
ça veut dire a vaut 3 et b vaut 2.
也就是说,a 的值是 3,b 的值是 2。
Donc on va pouvoir écrire.
因此我们可以这样写:
Que dans mon programme principal qui est là, j'ai une variable a
在主程序中——就是这里,
qui vaut 3 et une variable b qui vaut 2.
有一个变量 a,值为 3;还有一个变量 b,值为 2。
Puis je passe à la ligne d'après,
然后我们进入下一行,
et j'ai un appel ici avec un print fonction un a b, a b.
这里有一个 print 函数调用:function_one(a, b),传入 a 和 b。
Donc, je vais commencer par
所以,我先
remplacer. les valeurs de a et de b par les nombres qui correspondent.
把 a 和 b 替换成它们对应的数值。
Donc là ici. A vaut 3,
这里,a 是 3,
comme si j'avais enlevé la variable, et puis B vaut 2.
就像把变量名去掉、直接写数字一样;而 b 是 2。
Et puis là, mon appel de fonction va se faire en appelant la fonction un avec la
接着,函数调用将执行:调用函数 one,
valeur de la variable a, 3, et la valeur de b qui vaut 2.
传入变量 a 的值 3,以及变量 b 的值 2。
Donc là, mon appel de fonction va être
此时,我的函数调用就变成:
j'appelle la fonction qui s'appelle fonction un.
我调用名为 function_one 的函数。
Et cette fois, j'ai un a
这一次,a 的值是 3,
qui vaut 3 et un b qui vaut 2.
b 的值是 2。
Ce que vous voyez, c'est que ici j'ai ce A et ce B, et là j'ai ce A et ce B.
您看到的是,这里有一个A和一个B,而那里也有一个A和一个B。
Ces deux. A et B ne sont pas les mêmes, ces deux cases mémoire,
这两个A和B并不相同——它们是两块不同的内存空间。
le A qui est là et le A qui est là, sont deux cases mémoire différentes.
这里的A和那里的A,是两个不同的内存单元。
Celui- là est créé lorsqu'on appelle la fonction et il disparaîtra lorsqu'on va
这个A在调用函数时创建,
sortir de la fonction.
并在退出函数时消失。
Celui- là, il est en dehors de la fonction, il va rester.
而那个A在函数外部,会一直保留。
Pareil pour le B, ce B- là est en dehors de la fonction,
B的情况也一样:这个B在函数外部,
celui- là est créé quand on appelle la fonction et c'est tout.
而那个B则在调用函数时创建,仅此而已。
Donc là, je vais avoir ma commande print A B, donc A qui vaut 3
接下来,我执行print(A, B)命令,此时A的值是3,
et B qui vaut 2, je peux créer mon petit écran qui est là.
B的值是2,我可以生成右侧这个小屏幕。
Ça va m'imprimer 3, 2.
它将输出:3,2。
Puis mon opération a plus égale b, donc a.
接着执行操作:a += b,即a等于
est égal à a plus b si je le traduis ça nous fait trois plus deux ça fait cinq donc
a加b;换算一下就是3加2,结果是5,因此
a vaut cinq maintenant et je renvoie j'ai oublié de faire mes étapes quand je suis
现在a的值变为5;我还要返回结果——刚才跳过了步骤:
passé là je suis passé là j'ai fait mon print
当我执行到这里时,我直接跳到了这一步,先做了print,
et je suis en train de faire
现在正要执行a加b运算。
Je suis là, j'ai fait mon print et je suis en train de faire a plus b.
此刻,我已执行完print,正在计算a加b。
Là maintenant j'en suis là, return a, donc je vais ressortir.
现在我来到这一步:return a,于是我就要返回了。