溫馨提示×

溫馨提示×

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

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

Python的五個坑分別是什么

發(fā)布時間:2021-12-04 19:31:23 來源:億速云 閱讀:151 作者:柒染 欄目:大數(shù)據(jù)

這篇文章將為大家詳細(xì)講解有關(guān)Python的五個坑分別是什么,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

今天,跟大家探討幾個Python比較常見的坑點。

1 含單個元素的元組

Python中有些函數(shù)的參數(shù)類型為元組,其內(nèi)有1個元素,這樣創(chuàng)建是錯誤的:

c = (5) # NO!
 

它實際創(chuàng)建一個整型元素5,必須要在元素后加一個逗號:

c = (5,) # YES!
   

2 默認(rèn)參數(shù)設(shè)為空

含有默認(rèn)參數(shù)的函數(shù),如果類型為容器,且設(shè)置為空:

def f(a,b=[]):  # NO!
   print(b)
   return b

ret = f(1)
ret.append(1)
ret.append(2)
# 當(dāng)再調(diào)用f(1)時,預(yù)計打印為 []
f(1)
# 但是卻為 [1,2]
 

這是可變類型的默認(rèn)參數(shù)之坑,請務(wù)必設(shè)置此類默認(rèn)參數(shù)為None:

def f(a,b=None): # YES!
   pass
   

3 共享變量未綁定之坑

有時想要多個函數(shù)共享一個全局變量,但卻在某個函數(shù)內(nèi)試圖修改它為局部變量:

i = 1
def f():
   i+=1 #NO!
   
def g():
   print(i)
 

應(yīng)該在f函數(shù)內(nèi)顯示聲明i為global變量:

i = 1
def f():
   global i # YES!
   i+=1
   

4 列表快速復(fù)制之坑

在python中*與列表操作,實現(xiàn)快速元素復(fù)制:

a = [1,3,5] * 3 # [1,3,5,1,3,5,1,3,5]
a[0] = 10 # [10, 2, 3, 1, 2, 3, 1, 2, 3]
 

如果列表元素為列表或字典等復(fù)合類型:

a = [[1,3,5],[2,4]] * 3 # [[1, 3, 5], [2, 4], [1, 3, 5], [2, 4], [1, 3, 5], [2, 4]]

a[0][0] = 10 #
 

結(jié)果可能出乎你的意料,其他a[1[0]等也被修改為10

[[10, 3, 5], [2, 4], [10, 3, 5], [2, 4], [10, 3, 5], [2, 4]]
 

這是因為*復(fù)制的復(fù)合對象都是淺引用,也就是說id(a[0])與id(a[2])門牌號是相等的。如果想要實現(xiàn)深復(fù)制效果,這么做:

a = [[] for _ in range(3)]
   

5 列表刪除之坑

刪除一個列表中的元素,此元素可能在列表中重復(fù)多次:

def del_item(lst,e):
   return [lst.remove(i) for i in e if i==e] # NO!
 

考慮刪除這個序列[1,3,3,3,5]中的元素3,結(jié)果發(fā)現(xiàn)只刪除其中兩個:

del_item([1,3,3,3,5],3) # 結(jié)果:[1,3,5]
 

正確做法:

def del_item(lst,e):
   d = dict(zip(range(len(lst)),lst)) # YES! 構(gòu)造字典
   return [v for k,v in d.items() if v!=e]

關(guān)于Python的五個坑分別是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI