B1 · 第8集 · 5:03
Python变量交换原理
本集讲解Python中变量赋值与交换的原理,包括临时变量法和同时赋值法。
来源:jmbarbier / peertube.solidev.net · 许可:CC BY-SA 4.0
字幕
A égale B, ça veut dire qu'on prend la valeur de B et on la met dans A.
A 等于 B,意思是取 B 的值,赋给 A。
Donc la valeur de B, c'était 2.
所以 B 的值原本是 2。
Et on met cette valeur dans a.
然后把这个值赋给 a。
Donc qu'est- ce qu'on a maintenant?
那么现在我们得到了什么?
On a a qui vaut deux.
我们得到 a 等于 2。
Et on a b qui vaut 2.
而 b 也等于 2。
J'ai écrasé la valeur 5.
我覆盖了原来的值 5。
Ce qui fait que quand à la ligne d'après je vais faire b égal a,
因此,下一行执行 ‘b 等于 a’ 时,
le b égal a ici, le a c'est plus la valeur que j'avais au début qui est dedans.
这里的 a,已不再是最初存入的那个值了。
Mais c'est la valeur que je venais de changer.
而是我刚刚修改后的新值。
Donc là ici, je vais faire, je prends la valeur 2 qui est la valeur de a et je la
所以这里我要做的是:取出 a 当前的值 2,
remets dans b.
再把它重新赋给 b。
J'écrase 2 par 2.
于是用 2 覆盖了原来的 2。
Donc là ici, c'est toujours a= 2 et b=
所以此时,a 仍是 2,b 也是
2. Donc la question c'est comment est- ce qu'on fait pour aller inverser la valeur
2。那么问题来了:怎样才能交换 a 和 b 的值呢?
de a et de b? La bonne solution, l'idée c'est que là qu'est- ce qui s'est passé,
正确的方法在于:刚才发生了什么?
on a écrasé quelque part
我们在某处覆盖了一个值,
la valeur. qui était dans a.
就是原来存在 a 中的那个值。
Et donc avant d'aller modifier a,
因此,在修改 a 之前,
il faut peut- être aller sauvegarder en quelque sorte la valeur qui était dans
我们或许需要先将 a 原来的值
quelque part pour pouvoir la garder en mémoire pour pas l'écraser.
暂存到某个地方,以便记住它,不被覆盖。
Donc la bonne solution, si je fais a égale 5.
所以正确做法是:先令 a 等于 5。
A égale 5, B égale 2.
a 等于 5,b 等于 2。
Et pour l'inverser.
现在要交换它们的值。
Eh bien, je vais être obligé de, on
那么,我们就必须引入一个变量,
va dire c, garder en mémoire celui qui a été écrasé.
我们暂且叫它 c,用来保存那个被覆盖的值。
Tout à l'heure, on a écrasé le a, d'accord?
刚才,我们把 a 覆盖了,对吧?
Je vais le garder.
我会保留它。
Là ici, la valeur de a va se mettre dans c.
这里,a 的值会被存入 c。
Donc là, si j'écris, je vais avoir a égale 5, b
所以现在,如果我写出来,就会得到:a 等于 5,b
égale 2, et c qui après ça vaut la valeur de a, 5.
等于 2,而 c 随后等于 a 的值,也就是 5。
Là maintenant, je peux faire a égale b.
现在,我可以执行 a 等于 b。
Là, dans ce cas- là, on aura a
这种情况下,a
égale deux. B égal 2 et C égal 5.
等于 2;b 等于 2;c 等于 5。
Donc là j'ai bien écrasé la valeur de A mais je l'ai encore quelque part,
所以我确实覆盖了 a 的值,但它仍保存在某处,
elle n'est pas perdue, je l'ai encore dans la valeur C.
并未丢失,它还在变量 c 中。
Donc c'est à ce moment- là que je vais pouvoir écrire B égal non plus A mais B égal
因此,此时我就能写成:b 不再等于 a,而是等于
C. Là, dans ce cas- là, a égale 5, b égale 2, et puis c égale 5.
c。这时,a 是 5,b 是 2,c 是 5。
Merci c, il nous a bien servi.
谢谢 c,它帮了大忙!
C'est lui qui a permis d'inverser les valeurs de a et de b.
正是它,使我们得以交换 a 和 b 的值。
Voilà, donc attention, les choses se font les unes à la suite des autres.
好了,注意:这些操作是依次进行的。
Là ici quand j'ai a égal b et b égal a, je fais d'abord ça, donc j'écrase,
比如这里,当我写 a 等于 b、b 等于 a 时,我先执行前者,也就是先覆盖,
puis ça. Alors il y a une manière de faire en Python.
再执行后者。Python 中其实有一种方法,
qui permet de faire les
可以实现
assignations en simultané.
同时赋值。
Donc c'est Plus court à écrire, c'est plus joli.
这样写更简短,也更美观。
Les assignations.
即同时赋值。
En simultané. A virgule B est égal à B virgule A.
a,b 等于 b,a。
Alors qu'est- ce que ça fait?
那么,这会起到什么效果呢?
Ça promet en même temps, il va se débrouiller le Python pour mettre la valeur de B
它会同时进行:Python 会自动把 b 的值
dans A, la valeur de A dans B.
放进 a,把 a 的值放进 b。
Entre guillemets en même temps.
同时加上引号。
Il se débrouille et il va permet, il va faire ça,
他能自行处理,将实现这一点,
il prend en fait la valeur qui est là
实际上,他会取用此处的值,
et il la met là- dedans.
然后把它放进那里。
D'accord, donc c'est plus rapide.
好的,所以这样更快。
C'est plus joli.
也更简洁美观。
Mais il faut bien comprendre que d'abord ça n'existe pas dans tous les langages ça,
但必须明白:首先,并非所有编程语言都支持这种写法;
et puis qu'en fait derrière à la fin, un moment, même si c'est caché de nous,
其次,实际上,在底层——哪怕对我们隐藏了——
un moment il s'est passé quelque chose comme ça,
终究会发生类似这样的过程:
la valeur précédente a été sauvegardée avant d'être écrasée.
旧值会在被覆盖前先被保存下来。
L'avantage de ça, c'est qu'on peut le faire si on a par exemple a b c d,
这样做的好处是:比如我们有变量 a、b、c、d,
que je vous demande de passer b dans a, c dans d, etc, de faire plein de choses,
你让我把 b 的值传给 a、c 的值传给 d,等等,做很多赋值操作,
on peut le faire a b c d égal b c d a et
我们可以直接写成 ‘a, b, c, d = b, c, d, a’,
faire par exemple une permutation circulaire des choses comme ça,
从而实现诸如此类的循环置换,
donc en simultané.
而且所有操作同步完成。
Voilà pour finalement
总之,
quelque chose qui va être super utile.
这是个非常实用的功能。
On donne de la mémoire à notre Python.
我们为 Python 分配内存空间。
Là, ici, on fait les choses en live, en direct.
目前,我们在这里实时、即时地操作。
Là, maintenant, on va pouvoir enregistrer, mettre une mémoire à quelque chose.
接下来,我们将能保存数据,为某个对象添加记忆功能。
Et ben juste avoir de la mémoire, c'est pas pour autant être très intelligent.
不过,仅仅拥有记忆,并不等于特别聪明。
Avec la mémoire, on peut juste apprendre et recracher.
靠记忆,我们只能学习并复述内容。
Donc si on veut donner un tout petit peu d'intelligence à notre Python,
因此,若想让我们的 Python 稍微‘聪明’一点——
intelligence entre guillemets, il va falloir lui apprendre à
这里的‘智能’加了引号——
réagir suivant, voilà, si c'est comme ça, faire ça.
就得教它根据情况做出反应:如果条件成立,就执行相应操作。
Là, on va juste la mémoire, on est quelque chose qui est toujours la même chose.
这里,我们只是在使用内存,它始终是同一事物。
Si maintenant on va être capable de
如果现在我们能让
faire des choses différentes à notre Python suivant le contenu d'une variable,
Python根据某个变量的内容执行不同操作,
suivant quelque chose, on va lui donner beaucoup plus de possibilités.
也就是依据某些条件,就能赋予它更多功能。
C'est notre phase d'après qu'on va voir, ça sera les structures conditionnelles.
接下来我们要学习的就是条件结构。
Si, sinon, alors, etc.
比如‘如果’、‘否则’、‘那么’等等。
Ça c'est juste pour après.
这些内容留到后面再讲。