天天看点

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

28 条回复 • 2018-08-27 15:30:39 +08:00

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

1

2018-08-26 15:29:50 +08:00

b, a 返回的是一个 tuple

然后 a, b 分别赋值为第一个和第二个

就是

(a, b) = (b, a)

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

2

2018-08-26 15:33:48 +08:00

学一学编译和解释器的概念

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

3

2018-08-26 15:35:57 +08:00 via iPhone

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

1

dis 看看

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

4

2018-08-26 15:37:37 +08:00 via Android

Python 元组拆包,当 a, b = b, a 的时候,会把 b, a 看做一个可迭代对象,依次赋值给 a, b 组成的元组

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

5

2018-08-26 16:16:43 +08:00

用 dis 看一看汇编就懂了

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

6

2018-08-26 16:18:29 +08:00 via iPhone

个人觉得这只不过是一种语法糖,虽然没写中间变量底层说不定用了

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

7

2018-08-26 16:23:34 +08:00

CAS

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

8

2018-08-26 16:35:51 +08:00 via Android

如果是这么个问法,我觉得任何语言都可以不用变量交换两个值。

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

9

2018-08-26 16:38:56 +08:00 via Android

unpacking,也就是多个产量负值时序列的拆包。简易写法

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

10

2018-08-26 16:43:29 +08:00 via iPhone

虽然没有用临时变量,但是用了栈。

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

12

2018-08-26 17:21:44 +08:00

同意一楼的说法

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

13

2018-08-26 17:28:18 +08:00

@kkk330 dis 是??

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

14

2018-08-26 17:29:57 +08:00 via iPhone

你没看到不代表不存在

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

15

2018-08-26 17:35:11 +08:00

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

1

背后相当于做了:(伪代码)

tmp = [a, b]

a = tmp[1]

b = tmp[0]

和内存地址没什么关系。各种语言不同的写法最后都会被编译成类似的机器代码。

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

17

2018-08-26 18:31:32 +08:00

都用 python 了就别想着"内存地址"了

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

18

2018-08-26 19:52:27 +08:00

不爱思考的新手

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

19

2018-08-26 20:19:54 +08:00

只是语法糖而已,如果有一种新的语言,甚至可以这样表示交换两个变量:

`a<->b`

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

20

2018-08-26 20:23:28 +08:00 via Android

元组的自动组包与自动解包

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

21

2018-08-26 21:38:09 +08:00 via Android

python 是个栈机,push pop 一波搞定

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

22

2018-08-26 22:03:22 +08:00

@wocanmei 其实没有用中间变量吧。

只不过 Python 的解释器支持一个字节码,ROT_TWO,可以直接交换栈顶的两个变量。其他的语言没有这个功能而已。应该也不能叫做是语法糖。

dis 查看方法:

https://docs.python.org/3/library/dis.html#opcode-ROT_TWO

ROT_TWO

Swaps the two top-most stack items.

cc @Alerta

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

23

2018-08-26 22:09:28 +08:00 via Android

想知道只用加减法怎么实现,不用临时变量交换两个值

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

24

2018-08-26 22:52:24 +08:00

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

25

2018-08-26 22:52:38 +08:00

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

26

2018-08-27 00:21:48 +08:00 via Android

a = a + b

b = a - b

a = a - b

@Joshua999

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

27

2018-08-27 08:51:10 +08:00 via iPhone

@scriptB0y #22 多谢科普

python交换两个值原理_关于 Python 不使用临时变量来交换两个值的原理

28

2018-08-27 15:30:39 +08:00 via Android

@tyx1703 当时脑抽,看了半天没想出来,谢谢