considere el siguiente código:Simulación de una variable 'local estática' en Python
def CalcSomething(a):
if CalcSomething._cache.has_key(a):
return CalcSomething._cache[a]
CalcSomething._cache[a] = ReallyCalc(a)
return CalcSomething._cache[a]
CalcSomething._cache = { }
Ésta es la manera más fácil que se me ocurre para la simulación de una variable 'local estática' en Python.
Lo que me molesta es que CalcSomething._cache se menciona fuera de la definición de la función, pero la alternativa sería algo así:
if not hasattr(CalcSomething, "_cache"):
setattr(CalcSomething, "_cache", { })
dentro de la definición de la función, que es muy engorroso.
¿Hay una manera más elegante?
[EDIT]
Para aclarar, esta pregunta no se trata de cachés de funciones locales, como podría sugerir el ejemplo anterior. He aquí otro ejemplo corto donde un 'estática local' podría ser útil:
def ParseString(s):
return ParseString._parser.parse(s)
# Create a Parser object once, which will be used for all parsings.
# Assuming a Parser object is heave on resources, for the sake of this example.
ParseString._parser = Parser()
BTW, usted mi ght quiere expresar su pregunta de manera diferente. No está buscando una variable estática local, sino una forma de introducir la memoria de su función. –
su segundo ejemplo es peor que el primero. Puede devolver datetime.datetime.strptime (dts, "% m-% d-% Y% H:% M:% S"), ya que strptime es un método de clase que crea un nuevo objeto datetime. Realmente no hay necesidad de crear un objeto datetime. – nosklo
Tiene razón sobre el segundo ejemplo. Cambió eso. –