这篇文章主要介绍了Python 如何实现变量交换?python实现变量交换的机制是什么?? 学了Python 的人可能都知道变量交换的概念就是 a,b = b,a,这句话用来交换两个变量 。相较于其它语言需要引入一个 temp 来临时存储变量的做法,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实现变量交换的机制是什么?的内容就讲解到这里了,希望通过阅读完这篇文章之后,你能有所收获!
推荐阅读
- 什么是python的伪私有属性?python的伪私有属性是什么?
- Python中tempfile模块有什么用?如何使用tempfile模块
- python中的not关键字有什么含义?python中not关键字如何使用?
- 如何对Python文本模式进行匹配?如何使用match方法进行匹配?
- Python怎么创建临时文件?Python中临时文件如何生成
- 如何使用python爬虫爬取数据?python爬虫爬取数据的六个步骤
- python中的字典如何转换成json字符串?python中的字典转换成json字符串的方法
- 正则表达式中regexp_replace函数如何使用? python正则表达式regexp_replace的使用方法
- python如何通过字节读取文件?python用字节读取文件的方法是什么?
- Python爬虫正则表达式常用符号有哪些?Python爬虫正则表达式常用符号使用方法