2017-12-16 10 views
-1

このコードはCodeChef twitter https://twitter.com/codechef/status/941329495046459395にあります。私は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 

私の質問です、私の「ベガス」関数は、変数「」と「B」

の値を交換されていない理由
+1

return文を追加してみてください。 https://www.tutorialspoint.com/python/python_functions.htm – kometen

+0

あなたのvegas関数に 'return a、b'と最後を入れてから' print(vegas(a、b)) 'を使用してください –

+1

[Function変数の値を変更する](https://stackoverflow.com/questions/27462805/function-to-change-values-of-variables) – JJJ

答えて

2

あなたが仕事のために意図した通りに動作しません。 This questionがこれに完全に応答しています。つまり、Pythonは引数abを2つの変数に変えます。これらの変数は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

はいを​​持つ2つの値を交換することができますことを知って興味があるかもしれないと無... 機能ラスベガス仕事をしても、aとbを返すことはありませんので、aとbはまだ6と9の外側です。関数は、変数の値に影響を与えませんので、あなたはこのコードスニペットmore here

+1

これは正しくありません。 **は参照渡しですが、参照は値6と9へのポインタに過ぎず、pythonは関数のスコープ内で目に見える新しい変数を作成します。私はGoogleのインタビューでこれが間違っていたので、私はこれを難しい方法で学びました。:) – hansaplast

+1

これは正しい引数はPythonの代入によって渡されます。私のリンクは正しいです。私は私の答えを編集しました。 –

1

を見ることができますArguments are passed by assignment in Python.

は、「どのようなラスベガスで起こることはラスベガスにとどまる」というジョークです。値に影響を与えるには、関数はスワップの結果を返す必要があります。 return文がなければ、関数は関数内で使用される独自の一時変数を作成するため、変数には影響しません。

+0

2つの既存の回答に同じことが既に記されている場合、これをなぜ追加しますか? – hansaplast

関連する問題