Python の連鎖代入を理解する
「x = y = somefunction()」のような式に代表される、Python の連鎖代入がきっかけとなりました複数の順次代入 (「x = somefunction(); y = somefunction()」) との等価性に関する議論。この問題を明確にするために、連鎖割り当ての操作を詳しく見てみましょう。
連鎖割り当てでは、左端のターゲットが最初に割り当てられます。したがって、「x = y = somefunction()」は次と同等です:
temp = somefunction() x = temp y = temp
一時変数「temp」の値を右側のターゲットに割り当てる前に、左側のターゲットが受け取るため、この順序は重要です。これは、連鎖代入関数の逆アセンブリで明らかです。
>>> def chained_assignment(): ... x = y = some_function() ... >>> import dis >>> dis.dis(chained_assignment) 2 0 LOAD_GLOBAL 0 (some_function) 3 CALL_FUNCTION 0 6 DUP_TOP 7 STORE_FAST 0 (x) 10 STORE_FAST 1 (y) 13 LOAD_CONST 0 (None) 16 RETURN_VALUE
関数によって返される値は、最初に「x」に格納され、次に「y」に格納されることに注意してください。
この理解は、連鎖代入の動作を理解するために重要です。たとえば、「x = y = []」のような式は、「x」と「y」の両方が同じリストを参照するため、避けてください。代わりに、「x = []」と「y = []」のような個別の代入を優先して、個別のリストを作成します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3