[解決済み] Pythonで整数を参照渡しにする
2022-09-15 14:36:48
質問
Pythonで整数を参照渡しにするにはどうすればよいですか?
私は関数に渡している変数の値を変更したいです。Pythonではすべて値で渡すと書いてありましたが、簡単なトリックがあるはずです。例えば、Javaでは、参照型を渡すことができます。
Integer
,
Long
など。
- 整数を参照で関数に渡すには?
- ベストプラクティスは何ですか?
どのように解決するのですか?
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__
.
関連
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] 変数を参照渡しする方法を教えてください。
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] オブジェクト名の前のシングルアンダーコアとダブルアンダーコアの意味は何ですか?
-
[解決済み] JavaScriptの関数をパラメータとして渡す
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] Flaskで1時間ごとに関数を実行するようにスケジュールするには?
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] tensorflowのCPUのみのインストールでダイナミックライブラリ 'cudart64_101.dll' を読み込めなかった
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 変数を参照渡しする方法を教えてください。
-
[解決済み] 前月の日時オブジェクトを返す
-
[解決済み] PythonでSVGからPNGに変換する
-
[解決済み] DataFrameに日付間の日数カラムを追加する pandas
-
[解決済み] 文字列から先頭と末尾のスペースを削除するには?
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] subprocess.run()の出力を抑制またはキャプチャするには?
-
[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] Python Empty Generator 関数