Pythonは5つのピット、あなたの80%は(右、あなたは5つの一般的なレベルに達して知っている)知りません

単一要素を含む1元基

作成された要素は、間違ってあり、その中タプルとしてPythonの引数の型の一部の機能、:

c = (5) # NO!

これは、実際に化粧要素5、要素の後に追加するには必見を作成します逗号

c = (5,) # YES!

2デフォルトパラメータがnullに設定されています

容器の種類とは、nullに設定されている場合、関数の引数のデフォルト値が含まれています:

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

3つの共有変数結合していないピット

時には、グローバル変数を共有するために複数の関数をしたいが、関数内のローカル変数を変更しようとしています。

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

これは、f関数が宣言されているに表示されなければならないiグローバル変数として:

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

速いピットのリストの4コピー

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([0])及びID([2])は、同じ家の番号であるため*です。あなたは深いコピーの効果を実現したい場合は、以下の操作を行います。

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

削除されたピットの5リスト

リストで削除要素は、この要素は、リスト内の複数回繰り返してもよいです。

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

2つだけが見つかった削除請求、この配列要素[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]

これらは、5つの共通ピットであるこれらのピットを避けることができ、ここで友人を見ることを望んで。

公開された65元の記事 ウォンの賞賛0 ビュー564

おすすめ

転載: blog.csdn.net/weixin_46089319/article/details/103971566