Python如何实现变量交换?python实现变量交换的机制是什么?

这篇文章主要介绍了Python 如何实现变量交换?python实现变量交换的机制是什么?? 学了Python 的人可能都知道变量交换的概念就是 a,b = b,a,这句话用来交换两个变量 。相较于其它语言需要引入一个 temp 来临时存储变量的做法,Python 的这种写法无疑非常优雅,下面我们来看看具体的实现过程吧!

Python如何实现变量交换?python实现变量交换的机制是什么?

文章插图
C语言和python的变量交换大有不同,在c中它会借助一个外部变量,可以对需要交换的变量进行临时的存储,这种方法在对三个数进行交换的时候非常常用,代码如下:
int a = 1; int b = 2; int temp; temp = a; a = b; b = temp;在c中这样就是直接对a、b两个变量的值进行交换
而在python语言中是这样使用的
a,b = 1,2 a,bb = b,a【Python如何实现变量交换?python实现变量交换的机制是什么?】这种语法看似简单,但是它是如何运行的呢?靠什么机制来对它进行支撑,再让我们进一步的来学习 。通常看到的就是上面的两种交换变量的方式,a,b = b,a 中右侧是一个元组表达式,即 b,a 是一个两个元素的tuple(a,b) 。表达式左侧是两个待分配元素,而 等号就相当于元组元素拆包赋值操作 。
从字节码一窥交换变量:
对于刚学习python的小伙伴可能并不了解 Python 字节码 。它就是一种用来解释python二进制的程序的一种编码,在python中一个虚拟机就是一个栈机器,Python 中函数调用、变量赋值等操作,最后都转换为对栈的操作 。这些对栈的具体操作,就保存在字节码里 。
import dis dis.dis("a,bb=b,a")   1           0 LOAD_NAME                0 (b)               2 LOAD_NAME                1 (a)               4 ROT_TWO               6 STORE_NAME               1 (a)               8 STORE_NAME               0 (b)              10 LOAD_CONST               0 (None)              12 RETURN_VALUE这上面的代码就是一个a,b=b,a 反编译的字节码,它可以变成我们可以读懂的机器指令 。
通过了解,我们就知道右侧是b,a的顺序,先计算在栈中,然后得到一个ROT_TWO 的指令,这个指令就是交换a、b变量的位置,在四五行中这一步的操作就是将两个元素进行先后弹出,分别传递给 a 和 b 元素 。
关于Python 如何实现变量交换?python实现变量交换的机制是什么?的内容就讲解到这里了,希望通过阅读完这篇文章之后,你能有所收获!

    推荐阅读