除非返回,否则如何将惰性变量传递给函数参数而不对它们进行求值

时间:2012-05-25 02:30:35

标签: python language-agnostic lazy-evaluation

这个问题针对的是python,虽然我不介意用户分享其他语言的经验。

基本上我的问题是尝试将惰性变量传递给函数。 (在我的情况下,我可能无法控制该函数,因此无法更改它以将生成器作为输入)。

示例(请注意,dict.get是一个函数的示例,但它很可能是foo)

def calc():
    sleep(10**100)
    return 42

def my_args():
    yield 'meaning'
    yield calc()


#Instead of

meaning_of_life = dict_.get('meaning', calc())

#I would rather

meaning_of_life = dict_.get(my_args)

我不认为有任何一线优雅的解决方案?可能需要复杂的猴子修补? (如果是这样,我尝试一下是不值得的。)

感谢。

2 个答案:

答案 0 :(得分:2)

您可以使用特殊对象推迟计算,直到首次使用该对象。看起来Lazy Proxy会做你想做的事。

答案 1 :(得分:0)

meaning_of_life = dict_.get('meaning') or calc()