四月 8

在一个程序里面,比较常见的操作便是Swap了。把两个或者多个变量的值进行交换,我们都做过这种程序,不管是高手还是新手。

常见的解决方案是:(c/c++/java)

//swap a and b

temp=a;

a=b;

b=temp;

很显然,我们需要一个临时变量来帮助我们实现这个过程。或者临时指针或者其他的方案。

让我们来看看Python下的swap:

a,b = b,a

Well,我们可以不用那个临时变量了。也没省多少力气?那看看下面这个:

>>> a,b,c,d,e = 1,2,3,4,5
>>> print a,b,c,d,e
1 2 3 4 5
>>> a,b,c,d,e = b,d,e,c,a
>>> print a,b,c,d,e
2 4 5 3 1

WOW!可以看到,这个程序就想我们想象中的问题一样简单!呃,我是说,这个过程更接近我们脑海里面的东西。(当然如果常年的编程使得您具备了机器的思维,那么可能你不会这么想……我们称之为退化)

是什么让Python下的Swap变得如此简单?Python更聪明?我们知道,这只是Python特殊的元组(tuple)机制,在简单的表达式背后,运行的是一个打包解包的过程。赋值符左边的元素分别被赋予右边对应位置的元素的值。实际上,如果要准确的表达这个概念,我们可以把表达式写作:

(a,b,c,d,e) = (b,d,e,c,a)

圆括号不是必须的,我们通过逗号来分割元素,而这个过程是一个多赋值,只不过在这里我们用多赋值来实现了Swap的功能而已。这个机制很有意思,我头一次用如此简洁优美的格式实现变量值的交换。(使用其他语言的库函数或模板除外,虽然我们看不到具体实现过程,但我知道这个过程没有这么美……)

我已经有些迫不及待的深入Python世界了,但是我知道这样不行,就像游泳之前,至少先做做准备活动,弄湿自己再说。

夜了,睡吧……Night,Amazing Python!

Trackback: http://tb.donews.net/TrackBack.aspx?PostId=328222