在Python 3 中,由於作用域的原因,不允許從類別定義中的清單推導式存取類別變數限制。類別範圍不被視為清單理解中使用的變數的有效查找範圍。
1 2 3 |
|
此程式碼將引發 NameError: name 'x' is not Defined在 Python 3 中。
Python 遵循嚴格的作用域規則,且類作用域與函數、迴圈和推導式的作用域是分開的。推導式始終在其自己的作用域內執行,其中包括推導式本身內聲明的任何變數。
在 Python 2 中,這不是問題,因為列表推導式是使用允許存取封閉類別作用域的捷徑實現的。然而,這種行為被認為是不一致的,並在 Python 3 中進行了更改以強制執行適當的範圍。
雖然列表推導式的最內層可迭代無法存取類別變量,最外面的可迭代表達式可以。這是因為最外面的可迭代物件是在周圍範圍內求值的:
1 2 3 |
|
顯式函數:
在可以存取類別變數並使用列表的類別理解:
1 2 3 4 5 |
|
實例變量:
使用列表理解在構造函數中初始化實例變量:
1 2 3 |
|
全局變量:
宣告變數在類別之外並在列表理解中使用它:
1 2 3 4 |
|
以上是為什麼我無法在類別定義中的 Python 3 列表推導式中直接存取類別變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!