您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Python的五個坑分別是什么,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
今天,跟大家探討幾個Python比較常見的坑點。
Python中有些函數的參數類型為元組,其內有1個元素,這樣創建是錯誤的:
c = (5) # NO!
它實際創建一個整型元素5,必須要在元素后加一個逗號
:
c = (5,) # YES!
含有默認參數的函數,如果類型為容器,且設置為空:
def f(a,b=[]): # NO!
print(b)
return b
ret = f(1)
ret.append(1)
ret.append(2)
# 當再調用f(1)時,預計打印為 []
f(1)
# 但是卻為 [1,2]
這是可變類型的默認參數之坑,請務必設置此類默認參數為None:
def f(a,b=None): # YES!
pass
有時想要多個函數共享一個全局變量,但卻在某個函數內試圖修改它為局部變量:
i = 1
def f():
i+=1 #NO!
def g():
print(i)
應該在f函數內顯示聲明i
為global變量:
i = 1
def f():
global i # YES!
i+=1
在python中*
與列表操作,實現快速元素復制:
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]
如果列表元素為列表或字典等復合類型:
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 #
結果可能出乎你的意料,其他a[1[0]
等也被修改為10
[[10, 3, 5], [2, 4], [10, 3, 5], [2, 4], [10, 3, 5], [2, 4]]
這是因為*復制的復合對象都是淺引用,也就是說id(a[0])與id(a[2])門牌號是相等的。如果想要實現深復制效果,這么做:
a = [[] for _ in range(3)]
刪除一個列表中的元素,此元素可能在列表中重復多次:
def del_item(lst,e):
return [lst.remove(i) for i in e if i==e] # NO!
考慮刪除這個序列[1,3,3,3,5]中的元素3,結果發現只刪除其中兩個:
del_item([1,3,3,3,5],3) # 結果:[1,3,5]
正確做法:
def del_item(lst,e):
d = dict(zip(range(len(lst)),lst)) # YES! 構造字典
return [v for k,v in d.items() if v!=e]
關于Python的五個坑分別是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。