Articles

Python之美:变量交换

Summary: 对于大多数编程语言来说,交换两个变量的值都需要引入一个临时变量,例如C语言:

#include <stdio.h>

void swap(int *a, int *b)
{
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

int main(int argc, char *argv[])
{
    int a = 0;
    int b = 1;
    swap(&a, &b);

    printf("a = %d, b = %d\n", a, b);
}

对于C++来说也是很类似的,但是我们可以通过引用,使代码看起来稍微清晰一些:

#include <stdio.h>

void swap(int &a, int &b)
{
    int tmp = a;
    a = b;
    b = tmp;
}

int main(int argc, char *argv[])
{
    int a = 0;
    int b = 1;
    swap(a, b);

    printf("a = %d, b = %d\n", a, b);
}

C++的STL也给我们提供了一个现成的函数模板,我们直接使用std::swap模板就可以了:

#include <stdio.h>
#include <algorithm>

int main(int argc, char *argv[])
{
    int a = 0;
    int b = 1;
    std::swap(a, b);

    printf("a = %d, b = %d\n", a, b);
}

还有一道关于变量交换的面试题,大致是说如何不使用临时变量交换两个变量的值?对于C/C++来说,恐怕只能使用异或了:

void swap(int &a, int &b)
{
    a = a ^ b;
    b = b ^ a;
    a = a ^ b;
}

相信除了面试,不会有人真正写这样的代码,因为它实在太难懂了。但在Python里,这一切都得到了简化:

a, b = 0, 1
a, b = b, a
print("a = %d, b = %d\n" % (a, b))

变量a与b的交换只需要一行代码,而且这行代码看起来又非常直观。