中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

編寫Python代碼常見的錯誤有哪些

發布時間:2021-10-23 17:01:11 來源:億速云 閱讀:175 作者:iii 欄目:編程語言

這篇文章主要講解了“編寫Python代碼常見的錯誤有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“編寫Python代碼常見的錯誤有哪些”吧!

編寫過于風格化的代碼

這是Python初學者的一個典型特征。為了編寫類似高級偽英語的代碼,他們最終在其代碼庫中添加了以下類型的代碼段:

if x == 1 or x == 2

看起來似乎不錯。這行代碼的意思是變量x必須為1或2才能滿足條件。但是,此類代碼片段太過風格化,影響了可讀性。下面的替代代碼段很容易理解,該行代碼檢查值是否屬于列表中的元素:

if x in [1,2]

不必要的比較運算符:None和零

具有Java背景的程序員知道需要進行多少次空值(null)檢查(尤其是在Java  8之前的版本中)。因此,在Python中看到這樣的比較運算符就不足為奇了:

a == None b != None

上述情況可以利用python的方式編寫代碼來增強可讀性:

a is None b is not None

同樣值得注意的是,對于0,實際上并不需要在條件邏輯中使用比較運算符。0解釋為false,而非零數字則視為true。

使用長鏈式條件位邏輯

在大多數語言(包括Swift,Java,Kotlin)中,可用以下方式編寫某些比較邏輯:

if a < b < c

大多數語言不能在非關聯優先級中使用相鄰運算符,而Python則不同,Python可以鏈式賦值,如以下代碼所示:

if a < b < c

因此,這樣做可以避免按位運算符。

使用type()代替isinstance(),反之亦然

type和isinstance是Python中用于類型檢查的兩個廣泛使用的內置函數。通常,新手開發人員會認為這兩個函數很相似并互換使用。這可能引發無法預料的錯誤,因為type()和isinstance()具有一些細微的差異。

isinstance()函數用于檢查對象是否是指定類的實例,同時還要注意繼承。另一方面,type()僅檢查引用類型是否相等,并丟棄子類型。因此,以下代碼使用type()和isinstance()給出了不同的結果:

class Vehicle:     pass  class Car(Vehicle):     passisinstance(Car(), Vehicle) #returns True type(Car()) == Vehicle # returns False

同樣,以下代碼將布爾值視為int的實例(因為True和False基本上被視為1和0),但是使用type函數給出了不同的結果。

type(True) == int # falseisinstance(True, int) # trueisinstance(False,int) # true

因此,重要的是要了解Python的兩個類型檢查器函數之間的差異,并且不要彼此混淆。

混淆作用域中的局部變量和全局變量

Python中的作用域規則看起來相當簡單,但很容易造成誤解。例如,以下代碼在函數內部使用全局變量:

a = 10 def printMe():     print(a)printMe() # prints 10

如果通過修改函數中的變量來稍微調整上述代碼,就會拋出錯誤:

a = 20 def printA():     print(a)     a = 10print(a) # gives 20 printA() # gives error as a is referenced before assigned

一旦在函數內部修改了全局變量,Python就會將其視為局部變量,從而覆蓋全局變量。甚至賦值前的打印語句也沒有執行。

為確保此類名稱沖突不會導致錯誤,可以在局部函數內為全局變量附加global關鍵字。甚至最好將全局變量(如果確實需要使用)放在單獨的類中,以便始終將全局變量與類名一起使用。

可變默認參數

在Python中,使用默認參數很常見,它可以避免在調用函數時出現一長串參數。列表、字典和集合是Python中的可變類型。設置默認值會導致意外結果,如下所示:

def addToList(x, a=[]):     a.append(x)     return alistOne = addToList(5) #prints [5]anotherList = addToList(10) # [5, 10]

如你所見,第二個列表包含先前添加的元素,因為函數中的可變默認參數將它們存儲在各個狀態之間。

Python中可變默認對象的問題表現在定義函數時會對其進行評估,這會導致可變值也保存先前的內容。為避免此類嚴重的錯誤,請將None設置為默認值,然后在函數內分配可變變量,如下所示:

def addElement(x, a=None):     if not a:         a = []     a.append(x)     return a

忽略多重繼承和方法解析順序

編寫Python代碼常見的錯誤有哪些

圖源:unsplash

與大多數語言不同,Python支持多重繼承。即在具有繼承的類中,方法和類變量將根據繼承類時指定的順序執行。初學者通常會忽略此概念,尤其是在僅使用單一繼承的情況下。在下面的代碼中,當調用C類的方法時,將使用超類B的相應方法:

>>> class A(object): ...     def me(self):           print("class A")  >>> class B(A): ...     def me(self):           print("class B") class C(B, A):    passc = C() c.me() # prints class B

Python中繼承類的順序很重要,它可用來解決這些問題。

Python雖簡單,但小心不要與其他語言混淆了,這可能會導致奇怪的錯誤和程序崩潰。希望上述的總結可以幫你理清概念,編寫更穩定的Python代碼。

感謝各位的閱讀,以上就是“編寫Python代碼常見的錯誤有哪些”的內容了,經過本文的學習后,相信大家對編寫Python代碼常見的錯誤有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嘉善县| 金塔县| 泗阳县| 华亭县| 东乌珠穆沁旗| 铁岭县| 临泉县| 阿拉善右旗| 长乐市| 台北县| 郴州市| 虹口区| 乌鲁木齐县| 阿克苏市| 台东市| 泉州市| 大邑县| 民县| 乐山市| 宝坻区| 弋阳县| 西乡县| 扎兰屯市| 汨罗市| 赫章县| 嘉黎县| 清苑县| 通州区| 禄劝| 崇文区| 时尚| 黄平县| 大渡口区| 汉寿县| 丽水市| 阜城县| 玛多县| 邵阳县| 海盐县| 措美县| 开鲁县|