我在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'的值
它不会像你想要的那样工作。 This question正在全面回答这个问题。简而言之:Python将参数a
和b
转换为两个仅在vegas
中可见的变量。它们以a
和b
的值开始,但后来与外部a
和b
变量无关。
要使代码正常工作,请执行以下操作:
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
交换两个值
这段代码片段是一个笑话,“在拉斯维加斯发生的事情会停留在拉斯维加斯”,因为该函数不会影响变量的值。要影响值,函数需要返回交换的结果。如果没有return语句,函数将不会影响变量,因为函数会创建自己的临时变量以在函数中使用。
是和否......功能拉斯维加斯完成工作但从未返回a和b所以a和b仍在6和9之外。 Arguments are passed by assignment in Python.
你可以看到more here