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

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

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-31 19:22:02330瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn