深入理解python的列表展开(list unpacking)

本文探讨了Python中列表展开的原理,特别是在交换变量时的应用。通过分析Python的字节码,揭示了在求值栈上如何进行值交换的过程。当列表长度超过3时,字节码指令会有所不同。
摘要由CSDN通过智能技术生成

列表展开用的最多的是在交换两个变量的数值的时候

y,x = x,y

而在C/C++中的方式是

temp = x
x = y
y = temp

为什么我们在python中交换两个变量不需要设置一个临时变量呢?

答案与python的求值栈有关

我们来看一下上述交换变量的python字节码

import dis


def swap():
    x = 1
    y = 2
    y, x = x, y


print(dis.dis(swap))

结果是
  5           0 LOAD_CONST               1 (1)
              3 STORE_FAST               0 (x)

  6           6 LOAD_CONST               2 (2)
              9 STORE_FAST               1 (y)

  7          12 LOAD_FAST                0 (x)
             15 LOAD_FAST                1 (y)
             18 ROT_TWO
             19 STORE_FAST               1 (y)
             22 STORE_FAST               0 (x)
             25 LOAD_CONST               0 (None)
             28 RETURN_VALUE

关于python字节码,我会在以后的博文中说明

这里我们看到,在python的求值栈上首先存了x,y的值,然后将栈顶的两个元素互换,在分别装入到y和x中去,这就完成了变量值交换

注意当list的长度大于3的时候就不是用ROT这个指令了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值