何らかの種類の状態を維持し、その状態によって異なる動作をする必要がある関数があるとします。 Felix Klings answer to another questionを少し変更したバージョンを使用して変更可能なデフォルト値 Python - 関数の属性または変更可能な既定値
を使用した関数属性
- :状態は機能によって完全に格納されている場所、私はこれを実装するには、次の2つの方法の承知していますここでは、
re.sub()
で使用できる関数の例を示します。正規表現との3番目の一致が置き換えられるだけです:機能属性:
def replace(match): replace.c = getattr(replace, "c", 0) + 1 return repl if replace.c == 3 else match.group(0)
変更可能なデフォルト値:私に
def replace(match, c=[0]): c[0] += 1 return repl if c[0] == 3 else match.group(0)
最初はクリーンなようだが、私は、より一般的に第二を見てきました。どちらが好ましいのですか?
人々はちょうど機能を考えていないが、彼らがその広く初心者が使用していないので、属性が、_every_初心者が少なくとも一度は彼らにかまれますので、変更可能なデフォルト値を使用しての_everyone_思います。 – agf