Python lazy evaluator

¿Existe una forma pitónica de encapsular una llamada de función diferida, mediante la cual el primer uso de la funciónf(), llama a una función previamente vinculadag(Z) y en las llamadas sucesivasf() devuelve un valor en caché?

Tenga en cuenta que la memorización podría no ser perfecta.

Yo tengo

f = g(Z)
if x:
     return 5
elif y:
     return f
elif z:
     return h(f)

El código funciona, pero quiero reestructurarlo para queg(Z) solo se llama si se usa el valor. No quiero cambiar la definición deg(...) yZ es un poco grande para almacenar en caché.

EDIT: asumí quef tendría que ser una función, pero ese puede no ser el caso.

Respuestas a la pregunta(7)

Su respuesta a la pregunta