B1 · 第20集 · 4:54
手写Python函数执行过程
本集通过手动模拟演示Python函数调用、参数传递、默认值使用及返回值替换过程。
来源:jmbarbier / peertube.solidev.net · 许可:CC BY-SA 4.0
字幕
Puis mon programme continue, donc nouvel appel de la fonction 2,
接着,我的程序继续运行,因此再次调用函数2,
je retourne là- haut, et cette fois je vais à nouveau.
我返回到上面,这次我再次执行。
écrire l'appel de la fonction, donc nouvel appel de fonction2.
我再次写下函数调用,即再次调用函数2。
Cette fois l'appel il se fait avec a qui
这次调用中,参数a的值是
vaut 2, a qui vaut 2, et puis b n'est pas donné ici, il n'y a pas de b.
2,a等于2,而b未在此处给出,没有提供b。
Donc b va prendre la valeur par défaut, b vaut 3.
因此b将取默认值,即b等于3。
Donc qu'est- ce que je fais à l'intérieur de ma fonction?
那么,在我的函数内部,我做了什么?
Je fais b est égal à a moins b.
我执行:b等于a减去b。
Et ça nous donne 2 moins 3,
结果是2减3,
c'est à dire moins 1.
也就是负1。
Donc b contient maintenant la valeur moins 1.
因此b现在存入的值是负1。
A n'a pas changé, return.
a没有改变,执行return。
étape d'après, return B.
下一步:return b。
Je reviens à mon programme à plan.
我回到主程序。
Donc je reviens avec cette fois une variable qui revient à moins un,
这次,我带回了一个值为负1的变量,
une valeur qui revient à moins un.
一个返回值为负1。
Donc ma fonction est maintenant remplacée par la valeur de retour,
因此,我的函数现在被其返回值所替代,
et cette valeur de retour, elle fait- 1.
而这个返回值就是负1。
Donc j'ai ici la nouvelle valeur qui va s'afficher ici- 1.
所以这里显示的新值就是负1。
Donc mon programme, je l'ai parcouru en fait l'exécution de mon programme,
因此,我实际上已逐步执行完我的程序,
et à chaque fois que j'ai une fonction qui est appelée,
每次遇到函数调用时,
je précise quelle fonction a été appelée, avec quels paramètres.
我都明确指出调用了哪个函数、使用了哪些参数。
Quelle fonction a été appelée, le nom de la fonction,
调用的是哪个函数?函数名是什么?
avec quels paramètres. Ensuite, je vais pouvoir à l'intérieur
使用了哪些参数?接着,我就能在函数内部
regarder l'évolution des valeurs des différentes variables.
观察各个变量值的变化过程。
Là, b a changé de valeur.
这里,变量 b 的值发生了变化。
Et puis, quand on sort de la fonction qu'on a un return, on revient en arrière,
接着,当函数执行到 return 语句时,我们就返回上一层,
on revient à l'endroit où on était avant.
回到之前调用它的地方。
Pareil, deuxième appel de fonction.
同样地,这是第二次函数调用。
Quelle fonction a été appelée?
调用的是哪个函数?
Je suis dans la fonction, je regarde les variables de la fonction,
我进入该函数后,查看它的局部变量,
et je reviens.
然后返回。
à mon programme à plan.
回到我的主程序中。
Et à chaque fois qu'une fonction a été appelée, quand on revient,
每次调用一个函数后,当我们返回时,
en fait, c'est ce qui a été fait ici, la.
实际上,这里正是这样做的。
L'appel de la fonction est remplacé par la valeur de la fonction.
函数调用会被它返回的值所替换。
Donc. On peut aussi voir ça,
因此,我们还可以这样理解:
on peut vérifier d'abord qu'on s'est pas planté, en utilisant.
先用对应练习的笔记本检查一下,确保没出错。
le notebook correspondant à l'exercice, donc on le fait en papier d'abord,
我们先在纸上完成,
puis après on va aller vérifier.
之后再去验证结果。
Donc je peux exécuter ma fonction.
因此,我可以运行我的函数。
Et on a bien ici un 2- 1, ce qui correspond à ce qu'on avait prévu.
这里确实显示了 2 减 1,和我们预期的一致。
Et juste en dessous, on a ici en fait le programme dans un site internet qui
正下方是一个网站上的程序,
s'appelle Python Tutor, sur lequel on peut aller directement,
这个网站叫 Python Tutor,可直接访问,
là je l'ai inclus à l'intérieur,
我已将它嵌入到这里,
où vous pouvez taper votre programme et aller voir l'exécution de votre programme
你可以在上面输入自己的程序,逐步观察执行过程。
pas à pas. Donc là en fait, les différentes étapes qu'on va voir quand on va faire
所以,当我们点击‘下一步’时,
suivant, suivant, suivant, sont exactement les mêmes étapes
看到的每一步,
que celles qu'on a fait à la main quand j'ai fait en fait ce passage- là.
就完全等同于我刚才手动画出的那些步骤。
Donc on va, il nous dit qu'il y a 11 étapes, d'accord, on ne va pas être loin.
它提示共有 11 步,好的,我们不会走太远。
1, 2, 3, 4, 5, 6, 7, 8, 9.
1、2、3、4、5、6、7、8、9。
dix et onze en fait à peu près donc on a à peu près sur le même nombre d'étapes et
实际上还有十和十一,因此步骤数量大致相同,
on va pouvoir visualiser ça en même temps qu'on visualise la mémoire correspondante
我们就能同时观察对应的内存状态。
à chacun. des endroits où on est.
即我们当前所处的每个位置。
Donc si on reprend.
现在我们重新开始。
Ici, on va regarder.
这里,我们来观察一下。
Première étape, le Python voit l'existence de la fonction.
第一步:Python 发现了这个函数。
Très bien, il va jusqu'à la fin, il connaît l'existence de la fonction.
很好,它一直读到末尾,从而知道了该函数的存在。
Et là, vous voyez dans l'état de la mémoire,
此时,你看到内存状态中,
il a quelque part maintenant la connaissance d'une fonction qui s'appelle fonction2,
已记录了一个名为 fonction2 的函数,
qui prend deux arguments, dont un qui s'appelle b, qui vaut 3,
它接收两个参数,其中一个叫 b,值为 3,
avec un argument par défaut.
另一个是带默认值的参数。
Puis on arrive, on est maintenant à cette ligne- là, print fonction2 3 1.
接着我们来到这一行:print(fonction2(3, 1))。
Là, on va rentrer.
这时,我们将进入函数调用。
dans l'appel de la fonction deux avec les arguments trois un et c'est ce qui me fait
即用参数 3 和 1 调用 fonction2;
ici il me dit ok voilà je suis dans la fonction deux et les arguments les variables
此处提示我:‘好的,我现在进入了 fonction2,’
que j'ai disponibles sont trois et un.
我可使用的变量是 3 和 1。
Puis b est égal à moins b, j'exécute, ça nous fait b égal 2,
接着执行 b = -b,得到 b = 2,
return b, et je vais avoir ici le retour.
再执行 return b,于是返回值就出现了。
La valeur de renvoi, c'est 2.
返回值是 2。
Et je suis revenu dans mon programme principal.
随后我们回到主程序。
Et vous voyez que l'affichage a été fait ici.
你可以看到,输出显示在这里。
Puis nouvel appel de ma fonction2, cette fois avec un appel avec a qui vaut 2,
接着再次调用 fonction2,这次传入 a = 2,
et puis b qui n'était pas donné, donc qui prend la valeur 3.
而 b 未传入,因此取默认值 3。
Et là dans ce cas- là, je vais afficher b égale à a moins b.
这种情况下,我将输出 b = a - b 的结果。
Le b est calculé moins un, je renvoie la valeur b,
变量 b 被计算为减一,我返回 b 的值,
donc la valeur de retour c'est b,
因此函数的返回值就是 b,
donc l'appel de la fonction qui a été fait sera remplacé par la valeur de retour,
也就是说,该函数调用将被其返回值所替换,
ça me fait un print moins un et mon programme est terminé.
于是执行 print 减一,我的程序就结束了。