タプル内の値の交換: 内部を覗く
Python では、(a, b) = (b, a) のようなタプル代入を使用して 2 つの変数の値を交換します。単純なトリックのように思えるかもしれませんが、一時変数なしで内部的にはどのように動作するのでしょうか?
スタック操作
Python は、代入の右側の式を左側とは別に評価します。右辺が計算されると、その結果はスタックに格納されます。次に、スタック上で直接動作するオペコードを使用して左側の名前が割り当てられます。
2 つまたは 3 つの項目を含むタプル割り当ての場合、Python は ROT_TWO または ROT_THREE オペコードを使用してスタックを直接利用して要素を交換します。例:
def foo(a, b): a, b = b, a
dis.dis(foo) を使用してこの関数を逆アセンブルすると、次のことがわかります:
2 0 LOAD_FAST 1 (b) 3 LOAD_FAST 0 (a) 6 ROT_TWO 7 STORE_FAST 0 (a) 10 STORE_FAST 1 (b) 13 LOAD_CONST 0 (None) 16 RETURN_VALUE
ここで、ROT_TWO はスタック上の上位 2 つの値を交換し、事実上、 a と b の順序。
タプル構築とアンパック
3 つ以上の要素を含む代入の場合、Python はスタック上に中間タプルを構築します。次の例を考えてみましょう。
def bar(a, b, c, d): d, c, b, a = a, b, c, d
その逆アセンブリは次のようになります。
2 0 LOAD_FAST 0 (a) 3 LOAD_FAST 1 (b) 6 LOAD_FAST 2 (c) 9 LOAD_FAST 3 (d) 12 BUILD_TUPLE 4 15 UNPACK_SEQUENCE 4 18 STORE_FAST 3 (d) 21 STORE_FAST 2 (c) 24 STORE_FAST 1 (b) 27 STORE_FAST 0 (a) 30 LOAD_CONST 0 (None) 33 RETURN_VALUE
BUILD_TUPLE はスタック上の値から逆の順序でタプルを構築します。次に、UNPACK_SEQUENCE はタプルをポップし、その要素を左側の変数に割り当てるためにスタックに戻します。
最適化
UNPACK_SEQUENCE は 2 つまたは 3 つの項目の割り当てでは冗長に見えますが、後の最適化ステップでは、BUILD_TUPLE/UNPACK_SEQUENCE コンボをより効率的なものに置き換えます。 ROT_TWO または ROT_THREE オペコード。スワップ メカニズムが可能な限り合理化されるようにします。
以上がPython は一時変数を使用せずにタプル値をどのように交換しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

pythonusesahybridmodelofcompilation andtertation:1)thepythoninterpretercompilessourcodeodeplatform-indopent bytecode.2)thepythonvirtualmachine(pvm)thenexecuteTesthisbytecode、balancingeaseoputhswithporformance。

pythonisbothintersedand compiled.1)it'scompiledtobytecode forportabalityacrossplatforms.2)bytecodeisthenは解釈され、開発を許可します。

loopsareideal whenyouwhenyouknumberofiterationsinadvance、foreleloopsarebetterforsituationsは、loopsaremoreedilaConditionismetを使用します

henthenumber ofiterationsisknown advanceの場合、dopendonacondition.1)forloopsareideal foriterating over for -for -for -saredaverseversives likelistorarrays.2)whileopsaresupasiable forsaresutable forscenarioswheretheloopcontinupcontinuspificcond

pythonisnotpurelyLepted; itusesahybridapproachofbytecodecodecodecodecodecodedruntimerttation.1)pythoncompilessourcodeintobytecode、whodythepythonvirtualmachine(pvm).2)

ToconcatenateListsinpythothesheElements、使用:1)Operatortokeepduplicates、2)asettoremoveduplicates、or3)listcomplunting for controloverduplicates、各メトドハスディフェルフェルフェントパフォーマンスアンドソーダーインプリテーション。

pythonisantertedlanguage、useaseofuseandflexibility-butfactingporformantationationsincriticalapplications.1)解釈されたlikepythonexecuteline-by-lineを解釈します

Useforloopswhenthenumberofiterationsisknowninadvance、andwhiloopswheniterationsdependonacondition.1)forloopsareidealforsecenceslikelistoranges.2)


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。
