因为自己太笨了,实在想不通,所以来这里请教一下各位大佬。谢谢
1
tdk1738 2019-03-10 11:55:36 +08:00
闭包和拆包吧
|
2
lance6716 2019-03-10 12:01:35 +08:00 via Android
rot_two
|
3
wwqgtxx 2019-03-10 12:02:00 +08:00
这种只要有个栈不是很好实现么
push(list[2]) push(list[1]) list[2]=pop() list[1]=pop() |
4
binux 2019-03-10 12:02:29 +08:00
实现原理就是,Guido 想要 unpacking,于是就有了 unpacking
|
5
inframe 2019-03-10 12:20:57 +08:00 via Android
python 虚拟机是个完全的栈机
|
6
shanghj OP 很感谢各位大佬的回复,实现原理已经了解。
对于二楼的大佬的 ROT_TWO 的补充: #! /usr/bin/env python3 # -*- coding:utf-8 -*- from dis import dis def demo(a, b): print(a,b) a, b = b, a print('new: ', a,b) a, b = 2, 3 demo(a,b) dis(demo) ‘’‘ 输出结果:(重点在 ROT_TWO) 2 3 new: 3 2 6 0 LOAD_GLOBAL 0 (print) 2 LOAD_FAST 0 (a) 4 LOAD_FAST 1 (b) 6 CALL_FUNCTION 2 8 POP_TOP 7 10 LOAD_FAST 1 (b) 12 LOAD_FAST 0 (a) 14 ROT_TWO 16 STORE_FAST 0 (a) 18 STORE_FAST 1 (b) 8 20 LOAD_GLOBAL 0 (print) 22 LOAD_CONST 1 ('new: ') 24 LOAD_FAST 0 (a) 26 LOAD_FAST 1 (b) 28 CALL_FUNCTION 3 30 POP_TOP 32 LOAD_CONST 0 (None) 34 RETURN_VALUE ’‘’ |
7
darkTianTian 2019-03-11 00:24:22 +08:00
你可以把右边想象成元组,
左边实际应用了元组拆包 `list[1], list[2] = (list[2], list[1])` |