Python是一門簡單易學的編程語言,語法簡潔而清晰,并且擁有豐富和強大的類庫。與其它大多數程序設計語言使用大括號不一樣 ,它使用縮進來定義語句塊。
在平時的工作中,Python開發者很容易犯一些小錯誤,這些錯誤都很容易避免,本文總結了Python開發者最常犯的10個錯誤,一起來看下,不知你中槍了沒有。
1.濫用表達式作為函數參數默認值
Python允許開發者指定一個默認值給函數參數,雖然這是該語言的一個特征,但當參數可變時,很容易導致混亂,例如,下面這段函數定義:
代碼如下:
>>> def foo(bar=[]): # bar is optional and defaults to [] if not specified
... bar.append("baz") # but this line could be problematic, as we'll see...
... return bar
在上面這段代碼里,一旦重復調用foo()函數(沒有指定一個bar參數),那么將一直返回'bar',因為沒有指定參數,那么foo()每次被調用的時候,都會賦予[]。下面來看看,這樣做的結果:
代碼如下:
>>> foo()
["baz"]
>>> foo()
["baz", "baz"]
>>> foo()
["baz", "baz", "baz"]
解決方案:
代碼如下:
>>> def foo(bar=None):
... if bar is None: # or if not bar:
... bar = []
... bar.append("baz")
... return bar
...
>>> foo()
["baz"]
>>> foo()
["baz"]
>>> foo()
["baz"]
2.錯誤地使用類變量
先看下面這個例子:
代碼如下:
>>> class A(object):
... x = 1
...
>>> class B(A):
... pass
...
>>> class C(A):
... pass
...
>>> print A.x, B.x, C.x
1 1 1
這樣是有意義的:
代碼如下:
>>> B.x = 2
>>> print A.x, B.x, C.x
1 2 1
再來一遍:
代碼如下:
>>> A.x = 3
>>> print A.x, B.x, C.x
3 2 3
僅僅是改變了A.x,為什么C.x也跟著改變了。
在Python中,類變量都是作為字典進行內部處理的,并且遵循方法解析順序(MRO)。在上面這段代碼中,因為屬性x沒有在類C中發現,它會查找它的基類(在上面例子中只有A,盡管Python支持多繼承)。換句話說,就是C自己沒有x屬性,獨立于A,因此,引用 C.x其實就是引用A.x。
3.為異常指定不正確的參數
假設代碼中有如下代碼:
代碼如下:
>>> try:
... l = ["a", "b"]
新聞熱點
疑難解答