Pascal にはvar
パラメーターがあり、関数はパラメーター値を新しい値に変更できます。
procedure a(var S1, S2: string);
begin
S1:= S1+'test'+S1;
S2:= S1+'('+S2+')';
end;
Pythonにはそのような機能がありますか? string
メソッド内のパラメーターを変更できますか、それともreturn
後で変数を使用して割り当てる必要がありますか?
Pascal にはvar
パラメーターがあり、関数はパラメーター値を新しい値に変更できます。
procedure a(var S1, S2: string);
begin
S1:= S1+'test'+S1;
S2:= S1+'('+S2+')';
end;
Pythonにはそのような機能がありますか? string
メソッド内のパラメーターを変更できますか、それともreturn
後で変数を使用して割り当てる必要がありますか?
Python は複数の値を (タプルの形式で) 返すことができるため、参照によって値を渡す必要がなくなります。
単純なサンプル ケースでは、同じ手法を適用できたとしても、Python 文字列は可変ではないため、同じ結果を得ることができませんでした。
そのため、単純な例は次のように Python に変換できます。
def a(s1, s2):
s1 = '{0}test{0}'.format(s1)
s2 = '{}({})'.format(s1, s2)
return s1, s2
foo, bar = a(foo, bar)
別の方法として、変更可能なオブジェクト (辞書、リストなど) を渡し、その内容を変更します。
これは「参照渡し」と呼ばれ、いいえ、Python はそれを行いません (ただし、変更可能なオブジェクトを値渡しして関数内で変更すると、同じオブジェクトであるため、どこでも変更されます)。
Python では別の方法で行う方がよい場合があります。他の回答を参照してください。
参照によって何かを渡す必要がある場合、簡単な方法は、要素を 1 つだけ含むリストを渡して、関数を変更させることlistarg[0]
です。