Есть моя проблема:
Предположим, у нас есть 3 функции: f, g, h и следующий код
y = f(x)
a = g(y)
b = h(y)
Я хочу сделать это в одной строке, например:
a,b = g(f(x)),h(f(x))
но это неэффективно, если f очень медленный (и не кеширует свой результат)
У меня есть одно решение с генератором:
a,b = ((g(y),h(y)) for y in (f(x),)).next()
но это не очень читабельно
Я бы хотел сделать что-то подобное:
with f(x) as y: a,b = g(y),h(y)
У кого-нибудь есть идея?
(это чит
y = f(x);a = g(y);b = h(y)
)
код
import time
def f(t):
time.sleep(1)
print 'f called'
return t
def g(t): return 1
def h(t): return 2
a,b = g(f(x)),h(f(x))
a,b = ((g(y),h(y)) for y in (f(x),)).next()