Python preguiçoso avaliador

Existe uma maneira Pythonic de encapsular uma chamada de função lenta, pela qual no primeiro uso da funçãof(), chama uma função vinculada anteriormenteg(Z) e nas chamadas sucessivasf() retorna um valor em cache?

Observe que a memorização pode não ser o ajuste perfeit

Eu tenho

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

O código funciona, mas quero reestruturá-lo para queg(Z) é chamado apenas se o valor for usado. Não quero alterar a definição deg(...) eZ é um pouco grande para armazenar em cache.

EDIT: Eu assumi quef teria que ser uma função, mas pode não ser o cas

questionAnswers(7)

yourAnswerToTheQuestion