有我的問題:Python的函數式編程
假設我們有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()
只是使它2行。 – kennytm 2012-01-04 09:26:51
'y = f(x); a,b =(g(y),h(y))'? – Marcin 2012-01-04 09:44:02
你的第一個答案是正確的,但這不是函數式編程。這個問題只是爲了好玩並且深入學習python。 – user1129519 2012-01-04 10:04:04