[解決済み] Pythonで2つの変数を入れ替える標準的な方法はありますか?
2022-03-24 12:56:41
質問
Pythonで、この構文を使って2つの変数の値を入れ替えたのを見たことがあります。
left, right = right, left
これは、2つの変数の値を入れ替える標準的な方法と考えられていますか?それとも、慣習的に2つの変数の値を入れ替える最も一般的な他の方法がありますか?
どのように解決するのですか?
<ブロッククオートPythonは式を左から右へ評価します。その間に 代入の評価では、右辺が先に評価されます。 左手側
つまり、この式は次のようになります。
a,b = b,a
:
-
右側部分
b,a
が評価される。つまり、2つの要素からなるタプルがメモリ上に生成される。この2つの要素とは、識別子b
とa
を、プログラム実行中にその命令に遭遇する前に存在していた。 - このタプルの生成直後、このタプルオブジェクトの代入はまだ行われていませんが、それは問題ではありません、Pythonは内部的にそれがどこにあるかを知っています。
- そして、左辺が評価される、つまり、タプルが代入されるのです。
-
左辺は2つの識別子から構成されているので、タプルを解凍して、最初の識別子である
a
はタプルの最初の要素に割り当てられます(これは以前は b という名前を持っていたので、スワップされる前にb
)
と、2つ目の識別子であるb
はタプルの2番目の要素に割り当てられます(これは、以前は a であったため、スワップされる前の識別子はa
)
この仕組みにより、識別子に割り当てられたオブジェクトが効果的に入れ替わりました
a
と
b
では、質問にお答えします。はい、2つのオブジェクトの2つの識別子を入れ替えるのが標準的な方法です。
ちなみに、オブジェクトは変数ではなく、物です。
関連
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み] 文字列リテラルの前にある'b'文字は何を意味するのでしょうか?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] AndroidでPythonを実行する方法はありますか?
-
[解決済み] 最近のPythonでカスタム例外を宣言する適切な方法?
-
[解決済み] Pythonの変数名や関数名の命名規則について教えてください。
最新
-
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 interpreted model libraryによる機械学習モデル出力の可視化 Shap
-
Pythonの@decoratorsについてまとめてみました。
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】Python - "ValueError: not enough values to unpack (expected 2, got 1)" の修正方法 [閉店].
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。