交换发生了吗?

问题描述 投票:-1回答:3

我在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'的值

python swap
3个回答
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
投票

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


1
投票

是和否......功能拉斯维加斯完成工作但从未返回a和b所以a和b仍在6和9之外。 Arguments are passed by assignment in Python.

你可以看到more here

© www.soinside.com 2019 - 2024. All rights reserved.