本文共 1340 字,大约阅读时间需要 4 分钟。
我们都知道python交换两个数非常简单,直接a,b = b,a就可以实现,并不需要加入中间变量,可是,到底python是怎么做到这一点的呢?接下来就让我们来揭晓答案(见证奇迹~)
小编今天花了好久(中间还小小的郁闷了一下)终于弄明白python是怎么实现两个数的交换的了。
什么??你对这个问题不屑一顾?嘿嘿,那就来看看这个问题: 现在我们有一个数组array = [1,2,3,4,5,6],定义一个变量 x = 0,那么array[ x ]的值是1,array[ array[ x ] ]的值是2 请问:如果我想把他们俩交换,可以这行代码吗? array[x],array[array[x]] = array[array[x]],array[x] 有兴趣的小伙伴可以亲手试试哦~ 可粘贴代码如下:array = [1,2,3,4,5,6,7]x = 0array[x],array[array[x]] = array[array[x]],array[x]print(array)
尝试过后的小伙伴有没有觉得很神奇呢?打印的结果是:
[2, 2, 1, 4, 5, 6, 7] 在想了好久之后。终于在参考了 python 底层实现机制之后参悟了python解释器内部操作:
>>> def test(a,b):... a,b = b,a...>>> dis.dis(test) 2 0 LOAD_FAST 1 (b) 2 LOAD_FAST 0 (a) 4 ROT_TWO 6 STORE_FAST 0 (a) 8 STORE_FAST 1 (b) 10 LOAD_CONST 0 (None) 12 RETURN_VALUE>>>
所谓a , b = b , a 是如何做的呢?
在python中,会在过程中生成一个元组 c,并且c = (b ,a),然后进行a = c[0] , b = c[1] 的操作PS:不过在实现上,Python 解释器为效率考虑会将中间的临时元祖的创建过程优化掉,而不会真实创建一个元组出来,但这并不影响我们的结果和理解
回到我们一开始的题目,我们生成了一个元组(array[array[x]],array[x]),这个的值为(2,1)
第一步:array[x] = 2 第二步:array[array[x]] = 1 #其中array[x]已经变成了2,所以是对array[3]进行了array[3] = 1操作所以遇到list中类似的交换操作时候要十分小心哦,不可以贪图方便而错用了python的交换方法。
嘿嘿,I am very glateful that 你看到这里了哦~下回再见ヾ(o◕∀◕)ノヾ
Thx转载地址:http://bnggn.baihongyu.com/