Załóżmy, że masz funkcję, która musi utrzymywać pewien stan i zachowywać się inaczej w zależności od tego stanu. Zdaję sobie sprawę z dwóch sposobów realizacji tego, gdzie państwo jest przechowywana w całości przez funkcję:Python - Atrybuty funkcji lub zmienne wartości domyślne
- Korzystanie atrybut funkcyjny
- Stosując zmienny wartość domyślną
pomocą lekko zmodyfikowaną wersję Felix Klings answer to another question , tutaj jest przykładowa funkcja, która może być użyta w re.sub()
, więc tylko trzeci pasuje do regex zostanie zastąpiony:
Atrybut funkcji:
def replace(match):
replace.c = getattr(replace, "c", 0) + 1
return repl if replace.c == 3 else match.group(0)
Zmienna wartość domyślna:
def replace(match, c=[0]):
c[0] += 1
return repl if c[0] == 3 else match.group(0)
Dla mnie pierwszy wydaje czystsze, ale widziałem drugi bardziej powszechnie. Co jest lepsze i dlaczego?
Ludzie po prostu nie myśleć o funkcji atrybutów, ponieważ nie są one, że powszechnie stosowane przez początkujących, ale _everyone_ myśli stosując zmienny wartość domyślną, ponieważ początkujący _wszystkie_ zostaje ugryziony przez nich co najmniej raz. – agf