欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

編寫Python代碼常見的錯(cuò)誤有哪些

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

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、重慶小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了殷都免費(fèi)建站歡迎大家使用!

編寫過于風(fēng)格化的代碼

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

if x == 1 or x == 2

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

if x in [1,2]

不必要的比較運(yùn)算符:None和零

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

a == None b != None

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

a is None b is not None

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

使用長鏈?zhǔn)綏l件位邏輯

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

if a < b < c

大多數(shù)語言不能在非關(guān)聯(lián)優(yōu)先級(jí)中使用相鄰運(yùn)算符,而Python則不同,Python可以鏈?zhǔn)劫x值,如以下代碼所示:

if a < b < c

因此,這樣做可以避免按位運(yùn)算符。

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

type和isinstance是Python中用于類型檢查的兩個(gè)廣泛使用的內(nèi)置函數(shù)。通常,新手開發(fā)人員會(huì)認(rèn)為這兩個(gè)函數(shù)很相似并互換使用。這可能引發(fā)無法預(yù)料的錯(cuò)誤,因?yàn)閠ype()和isinstance()具有一些細(xì)微的差異。

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

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

同樣,以下代碼將布爾值視為int的實(shí)例(因?yàn)門rue和False基本上被視為1和0),但是使用type函數(shù)給出了不同的結(jié)果。

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

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

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

Python中的作用域規(guī)則看起來相當(dāng)簡單,但很容易造成誤解。例如,以下代碼在函數(shù)內(nèi)部使用全局變量:

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

如果通過修改函數(shù)中的變量來稍微調(diào)整上述代碼,就會(huì)拋出錯(cuò)誤:

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

一旦在函數(shù)內(nèi)部修改了全局變量,Python就會(huì)將其視為局部變量,從而覆蓋全局變量。甚至賦值前的打印語句也沒有執(zhí)行。

為確保此類名稱沖突不會(huì)導(dǎo)致錯(cuò)誤,可以在局部函數(shù)內(nèi)為全局變量附加global關(guān)鍵字。甚至最好將全局變量(如果確實(shí)需要使用)放在單獨(dú)的類中,以便始終將全局變量與類名一起使用。

可變默認(rèn)參數(shù)

在Python中,使用默認(rèn)參數(shù)很常見,它可以避免在調(diào)用函數(shù)時(shí)出現(xiàn)一長串參數(shù)。列表、字典和集合是Python中的可變類型。設(shè)置默認(rèn)值會(huì)導(dǎo)致意外結(jié)果,如下所示:

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

如你所見,第二個(gè)列表包含先前添加的元素,因?yàn)楹瘮?shù)中的可變默認(rèn)參數(shù)將它們存儲(chǔ)在各個(gè)狀態(tài)之間。

Python中可變默認(rèn)對(duì)象的問題表現(xiàn)在定義函數(shù)時(shí)會(huì)對(duì)其進(jìn)行評(píng)估,這會(huì)導(dǎo)致可變值也保存先前的內(nèi)容。為避免此類嚴(yán)重的錯(cuò)誤,請(qǐng)將None設(shè)置為默認(rèn)值,然后在函數(shù)內(nèi)分配可變變量,如下所示:

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

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

編寫Python代碼常見的錯(cuò)誤有哪些

圖源:unsplash

與大多數(shù)語言不同,Python支持多重繼承。即在具有繼承的類中,方法和類變量將根據(jù)繼承類時(shí)指定的順序執(zhí)行。初學(xué)者通常會(huì)忽略此概念,尤其是在僅使用單一繼承的情況下。在下面的代碼中,當(dāng)調(diào)用C類的方法時(shí),將使用超類B的相應(yīng)方法:

>>> 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雖簡單,但小心不要與其他語言混淆了,這可能會(huì)導(dǎo)致奇怪的錯(cuò)誤和程序崩潰。希望上述的總結(jié)可以幫你理清概念,編寫更穩(wěn)定的Python代碼。

感謝各位的閱讀,以上就是“編寫Python代碼常見的錯(cuò)誤有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)編寫Python代碼常見的錯(cuò)誤有哪些這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

網(wǎng)站欄目:編寫Python代碼常見的錯(cuò)誤有哪些
轉(zhuǎn)載來源:http://chinadenli.net/article34/ppgcpe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、App開發(fā)、品牌網(wǎng)站建設(shè)、外貿(mào)建站品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司