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

Mary-Kate Olsen
發布: 2024-10-31 19:22:02
原創
256 人瀏覽過

Why does the 'is' operator behave differently with non-cached integers inside and outside a function in Python?

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

查詢

在嘗試使用Python 解釋器時,注意到一個關於'是'運算符。具體來說,「is」在函數內求值時傳回True,但在函數外部求值時傳回False:

>>> def func():
...     a = 1000
...     b = 1000
...     return a is b
...

>>> a = 1000
>>> b = 1000
>>> a is b, func()
(False, True)
登入後複製

由於「is」計算物件的「id」,這表示在「func」函數內, 'a' 和'b' 指的是同一個int 實例。然而,在函數之外,它們引用不同的物件。為什麼會這樣呢?

解釋

Python 參考手冊提供了深刻的說明:

「區塊是作為一個單元執行的一段Python 程式文字」互動輸入的每個指令都是一個塊。 ”

在一個函數中,存在一個代碼塊,僅包含數字1000 的一個對象。因此,“id(a)”和“id(b)”返回相同的值,從而得到True 評估。

在函數之外,我們有兩個單獨的程式碼對象,每個對象的對象為1000。不同,導致錯誤評估。 );相反,應該使用相等運算符('==')。 🎜>

在'func' 函數中:

我們有一個1000 的'int' 實例,它被分配給'a' 和'b'。 🎜>

在'func'函數之外:

我們看到每個程式碼物件都有其實例1000,導致計算結果為False。 >此觀察結果適用於CPython,這是最廣泛使用的Python實作。不建議對可變物件使用“is”進行身份檢查,因為它們將始終評估為False。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!