Существует моя проблема:Python функционального программирования
Пусть у нас есть 3 функции: F, G, H и следующий код
y = f(x)
a = g(y)
b = h(y)
Я хочу сделать это на одной линии, как:
a,b = g(f(x)),h(f(x))
, но это не эффективно, если е очень медленно (и не кэширует это результат)
Я ВГА е одно решение с генератором:
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()
Просто сделайте это 2 строки. – kennytm
Что не так с 'y = f (x); a, b = (g (y), h (y)) '? – Marcin
Ваш первый ответ правильный, но это не функциональное программирование. Этот вопрос просто для удовольствия и для глубокого изучения питона. – user1129519