Python 如何将惰性变量传递给函数参数,而不计算它们,除非返回

Python 如何将惰性变量传递给函数参数,而不计算它们,除非返回,python,language-agnostic,lazy-evaluation,Python,Language Agnostic,Lazy Evaluation,这个问题是针对python的,尽管我不介意用户分享其他语言的经验 基本上,我的问题是试图将惰性变量传递给函数。(在我的情况下,我可能无法控制该函数,因此无法将其更改为以发电机作为输入) 示例(注意dict.get是函数的一个示例,但很可能是foo) 我不认为有任何一行优雅的解决方案?可能需要复杂的猴子修补?(如果是这样,我就不值得尝试了) 谢谢。您可以使用特殊对象将计算推迟到首次使用该对象时。它看起来可以做你想做的事。+1这真的很好,但我的实际函数不是dict,所以可能不会返回none。问题是,

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

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

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

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


谢谢。

您可以使用特殊对象将计算推迟到首次使用该对象时。它看起来可以做你想做的事。

+1这真的很好,但我的实际函数不是dict,所以可能不会返回none。问题是,
dict\uuuz['means']
可能是一个错误的值。它甚至可能是
None
当然,好吧:
dict_uu['means']if'means'在dict_uuuuuelse calc()
中——有很多方法可以做到这一点。我认为OP使生成器等的事情过于复杂了。@bluepnume我使用了'dict_u2;u.get'作为示例函数。我想要一个对“某个复杂函数”有效的解决方案好吧,那么当某个复杂函数不返回您想要的值时,它会表现出什么行为呢?它是否返回特定的值?它会引发异常吗?我没有python线索,但生成器不只是一个类的实例,其成员函数是迭代器吗?是的,starbolin,因此下一个值将是“means”,然后下一个值将是calc()。但是如果我们在“means”之后退出,那么我们将永远不需要生成calc(),但函数会分配参数,因此不幸的是,calc()将被调用doh,但您需要一个看起来像静态的符号表名,但它是后期绑定到函数运行时的???仅当通过值传递时,而不是通过引用传递时,才传递给?…python,dll。请澄清,您不希望calc在何时调用?在函数中,它将包含一些if语句。其中的一个if语句只是偶尔输入(取决于前两个函数参数的外观)。在这种情况下,if语句是惟一需要调用calc的地方。否则就不应该调用它。谢谢,这正是我要找的-在某个时候必须查看内部构件。@robertking推测它会覆盖用于实现Python本机函数和运算符的双下划线方法。
meaning_of_life = dict_.get('meaning') or calc()
meaning_of_life = dict_.get('meaning') or calc()