首頁 > 後端開發 > Python教學 > 為什麼「is」運算子對於函數內部和外部的非快取整數的行為不同?

為什麼「is」運算子對於函數內部和外部的非快取整數的行為不同?

DDD
發布: 2024-11-03 16:52:30
原創
975 人瀏覽過

Why Does the `is` Operator Behave Differently with Non-Cached Integers Inside and Outside Functions?

is 運算子對非快取整數的意外行為

問題:

在函數內,is 運算符當比較[-5, 256] 範圍之外的兩個整數位面量時為True,但在函數外部進行比較時為False。為什麼會出現這種不一致的情況?

答案:

tl;dr:

Python解釋器以程式碼區塊為單位執行。功能是單一區塊,而互動式命令是單獨的區塊。每個區塊都包含自己的對象,包括整數。因此,函數內部宣告的整數指向同一個對象,而函數外部宣告的整數則不然。

詳細說明:

  • 函數:

    • 函數:
    • 函數:
  • 函數:

    函數:
    • 函數:
    程式碼區塊在函數內定義。
區塊內的文字(例如 1000)儲存為單一物件。

是檢查物件身份,因此函數中的 a is b 傳回 True,因為 a 和 b 都指向同一個物件。

  • 互動式指令:

每個指令都以單獨的程式碼區塊執行。

每個區塊中的文字儲存為單獨的物件。
  • 檢查物件身份,並且由於文字的物件不同,a is b 傳回 False。
  • 其他觀察:
  • 此行為適用於非整數文字(例如浮點文字)。
Python 使用字典來儲存程式碼物件中的常數,並在新增常量之前檢查現有常數。 注意事項:鍊式語句:當指令鍊式時(例如,a = b = 1000 ),它們被解釋為單一程式碼區塊,導致True。 模組層級執行:模組層級執行(例如,a = b = 1000)發生在單一程式碼區塊內,結果為 True。 可變物件: 不一致不適用於可變物件; a = b = [] 總是會產生 False。

以上是為什麼「is」運算子對於函數內部和外部的非快取整數的行為不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板