1. ホーム
  2. python

[解決済み] Pythonで整数を参照渡しにする

2022-09-15 14:36:48

質問

Pythonで整数を参照渡しにするにはどうすればよいですか?

私は関数に渡している変数の値を変更したいです。Pythonではすべて値で渡すと書いてありましたが、簡単なトリックがあるはずです。例えば、Javaでは、参照型を渡すことができます。 Integer , Long など。

  1. 整数を参照で関数に渡すには?
  2. ベストプラクティスは何ですか?

どのように解決するのですか?

Pythonではなかなかそうはいきません。Pythonはオブジェクトへの参照を渡します。関数内部ではオブジェクトがあり、(可能であれば)そのオブジェクトを自由に変異させることができます。しかし、整数は 不変 . 回避策の1つは、変異させることができるコンテナで整数を渡すことです。

def change(x):
    x[0] = 3

x = [1]
change(x)
print x

これは最高に醜い/不器用ですが、Pythonでこれ以上のことをするつもりはないでしょう。なぜなら、Pythonでは、代入( = ) は右辺の結果であるどんなオブジェクトでも受け取り、左辺にあるどんなものにもそれを束ねる *(または適切な関数にそれを渡す) からです。

このことを理解すると、なぜ関数内で不変オブジェクトの値を変更する方法がないのかがわかります。不変なのでその属性を変更することはできませんし、新しい値を "variable" に代入するだけでは、実際に新しいオブジェクトを作成し(古いオブジェクトとは異なる)、ローカル名前空間で古いオブジェクトが持っていた名前をそれに与えていることになるからです。

通常、回避策として、単純に を返すことです。 を返すことです。

def multiply_by_2(x):
    return 2*x

x = 1
x = multiply_by_2(x)


*上記の最初の例のケースの場合。 3 に実際に渡されるのは x.__setitem__ .