代码之家  ›  专栏  ›  技术社区  ›  Protul

交换发生了吗?

  •  -1
  • Protul  · 技术社区  · 7 年前

    我在CodeChef推特上找到了这段代码 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
    

    我的问题是,为什么我的“vegas”函数不交换变量“a”和“b”的值

    3 回复  |  直到 7 年前
        1
  •  2
  •   hansaplast    7 年前

    它不会按你想要的方式工作。 This question 正在完全回答这个问题。简而言之:Python将参数 a b 分为两个变量,仅在中可见 vegas . 他们的价值观是 b 但与外界无关 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

        2
  •  1
  •   Brandon Armand    7 年前

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

        3
  •  1
  •   Ciro Spaciari    7 年前

    是和否。。。 vegas函数完成了这项工作,但从未返回a和b,因此a和b仍在6和9之外。 Arguments are passed by assignment in Python.

    你可以看到 more here