交换发生了吗?

时间:2017-12-16 08:50:23

标签: python swap

我在CodeChef twitter https://twitter.com/codechef/status/941329495046459395中找到了这段代码。它是用C语言编写的。我在Python3中完成了它。这是我的代码:

def vegas(a,b):
    temp = a
    a = b
    b = temp
a = 6
b = 9
print(a,b)
vegas(a,b)
print(a,b)

这就是答案:

6 9
6 9

我的问题是,为什么我的'拉斯维加斯'函数不交换变量' a'和' b'

3 个答案:

答案 0 :(得分:2)

它不会像你想要的那样工作。 This question正在全面回答这个问题。简而言之:Python将参数ab转换为两个仅在vegas中可见的变量。它们以ab的值启动,但与外部ab变量无关。

要使代码正常工作,请执行以下操作:

def vegas(a,b):
    temp = a
    a = b
    b = temp
    return a,b
a = 6
b = 9
print(a,b)
a,b = vegas(a,b)
print(a,b)

此外,您可能有兴趣知道可以使用a,b = b,a

交换两个值

答案 1 :(得分:1)

是的,不是...... 函数拉斯维加斯完成工作,但从不返回a和b所以a和b仍然是6和9外。 Arguments are passed by assignment in Python.

您可以看到more here

答案 2 :(得分:1)

这个代码片段是一个笑话,"拉斯维加斯发生的事情仍然存在于拉斯维加斯"因为该函数不会影响变量的值。要影响值,函数需要返回交换的结果。如果没有return语句,函数将不会影响变量,因为函数会创建自己的临时变量以在函数中使用。