Python 程式設計中常見的錯誤或“陷阱”有哪些?
以下是程式設計師常犯的一些最常見的 Python 程式設計錯誤/陷阱:
作用域名稱查詢:Python 按照 LEGB (區域性、封閉、全域性、內建) 的順序遵循作用域規則。由於 Python 沒有嚴格的型別繫結,程式設計師可以將外部作用域變數重新關聯到另一個值,該值以後可能在外部作用域中使用,但現在已被其他值替換。
不區分 `is` 和 `==`:Python 中的 `is` 運算子檢查兩個物件是否引用相同的記憶體地址。`==` 運算子執行 `__eq__` 函式,該函式可能針對不同的類以不同的方式檢查相等性。
在迭代時修改列表:如果在迭代時從列表中刪除元素,則會得到 IndexError。這是因為列表的大小在減小,而索引沒有隨之減小。
閉包繫結 - 請考慮以下程式碼:
示例
listLambdas = [lambda x : i + x for i in range(5)] for lam in listLambdas: print(lam(10))
輸出
這將給出以下輸出:
14 14 14 14 14
震驚?這是由於閉包中的繫結。此列表中的所有 lambda 都引用變數 i,即當它更改時,這些 lambda 開始引用新值。
與內建函式的名稱衝突:您肯定在某個時候建立了一個名為 sum 的變數。請注意,在這種情況下,您重新分配了對 sum 函式的引用。對於像這樣的事情,這似乎微不足道,但當包的命名方式如此時,可能會導致一些嚴重的問題。這可能會導致其他包匯入您的類而不是標準類。
運算子的非直觀實現:Python 提供了一種為類過載運算子函式的方法。通常,人們傾向於以不常見的方式實現這些運算子,最終建立複雜且不直觀的 API。
廣告