use*_*519 -1 python functional-programming function
有我的问题:
假设我们有3个函数:f,g,h和以下代码
y = f(x)
a = g(y)
b = h(y)
Run Code Online (Sandbox Code Playgroud)
我想在一行上完成这项工作,例如:
a,b = g(f(x)),h(f(x))
Run Code Online (Sandbox Code Playgroud)
但如果f非常慢(并且没有缓存它的结果),这效率不高
我有一个带发电机的解决方案:
a,b = ((g(y),h(y)) for y in (f(x),)).next()
Run Code Online (Sandbox Code Playgroud)
但这不是很可读
我想做一些这样的事情:
with f(x) as y: a,b = g(y),h(y)
Run Code Online (Sandbox Code Playgroud)
有没有人有想法?
(这是骗子
y = f(x);a = g(y);b = h(y)
Run Code Online (Sandbox Code Playgroud)
)
码
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()
Run Code Online (Sandbox Code Playgroud)
使用lambda.TA-DAH !:
>>> def f(a):
... return a+1
...
>>> def g(a):
... return a*2
...
>>> def h(a):
... return a*3
...
>>> (lambda x: (g(x),h(x)))(1)
(2, 3)
>>> (lambda x: (g(x),h(x)))(f(1))
(4, 6)
>>> a,b=(lambda x: (g(x),h(x)))(f(1))
>>> a
4
>>> b
6
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
496 次 |
| 最近记录: |