有我的问题:
假设我们有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)