質問:
関数内で、is 演算子は戻り値を返します[-5, 256] の範囲外にある 2 つの整数リテラルを比較する場合は True ですが、関数の外で比較した場合は False になります。この不一致はなぜ発生しますか?
答え:
tl;dr:
Python インタープリターはコード ブロックを単位として実行します。 。関数は単一のブロックですが、対話型コマンドは別個のブロックです。各ブロックには、整数を含む独自のオブジェクトが含まれます。したがって、関数内で宣言された整数は同じオブジェクトを指しますが、関数の外で宣言された整数は同じオブジェクトを指しません。 :
コード ブロックは関数内で定義されます。
はオブジェクトの同一性をチェックします。つまり、a と b は両方とも同じオブジェクトを指しているため、関数内で a が b である場合は True が返されます。
はオブジェクトの ID をチェックし、オブジェクトがリテラルであるため
注意事項:
モジュール レベルの実行: モジュール レベルの実行 (例: a = b = 1000) は単一のコード ブロック内で発生し、結果は True になります。
以上が「is」演算子の動作が関数内と関数外でキャッシュされていない整数に対して異なるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。