Digamos que tiene una función que necesita mantener algún tipo de estado y comportarse de manera diferente según ese estado. Soy consciente de dos formas de implementar este donde el estado se almacena en su totalidad por la función:Python: atributos de función o valores predeterminados mutables
- Usando un atributo de la función
- El uso de un valor predeterminado mutable
Utilizando una versión ligeramente modificada de Felix Klings answer to another question , aquí es una función de ejemplo que se puede utilizar en re.sub()
de modo que sólo el tercer partido a una expresión regular será reemplazado:
atributo función:
def replace(match):
replace.c = getattr(replace, "c", 0) + 1
return repl if replace.c == 3 else match.group(0)
mutable valor predeterminado:
def replace(match, c=[0]):
c[0] += 1
return repl if c[0] == 3 else match.group(0)
Para mí la primera parece más limpio, pero he visto la segunda más comúnmente. ¿Cuál es preferible y por qué?
La gente simplemente no piensan en función de los atributos, ya que no son tan ampliamente utilizados por los principiantes, pero piensa _everyone_ de utilizar el valor por defecto mutable porque _every_ principiante es mordido por ellos al menos una vez. – agf