tip :変更可能なデフォルト引数をPythonで監視する


Pythonのデフォルト引数は一度だけ評価されます.関数が呼び出されるたびに、関数が定義されたときに評価が行われます.これは、変更可能な既定の引数を使用し、いくつかの時点でそれを変異する場合、誤って共有状態を作成できません.これは、突然引数が現在の関数への将来のすべての呼び出しのためのデフォルトであることを意味します.
次のコードを例にとります.関数へのすべての呼び出しは同じリストを共有します.したがって、2回目の関数が呼び出されると、関数は空のリストから開始されません.代わりに、デフォルト引数は前の呼び出しからの値を含むリストです.
def append(n, l = []):
  l.append(n)
  return l

append(0) # [0]
append(1) # [0, 1]
関数の既定値として変更可能なオブジェクトを使用する必要がある場合は、引数の既定値をNone 代わりに.そして、関数本体がNone , あなたは副作用なしに必要な変更可能な値に設定することができます.
def append(n, l = None):
  if l is None:
    l = []
  l.append(n)
  return l

append(0) # [0]
append(1) # [1]
あなたは短い、高品質のコードのスニペットや記事が好きですか?だから私たち!訪問30 seconds of code これのようなより多くの記事のために、または、毎日のJavaScriptのために我々について来てください、反応して、パイソンスニペット!👨‍💻