Lambda函数内部的python迭代过程


问题内容

我有一个简单的python 函数

def positiveGauss(mean,stdev):
        result = -1
        while result < 0:
                result = mean + np.random.randn()*stdev
        return result

是否可以使用 lambda 做同样的事情?它需要在lambda内部进行迭代,但是我仍然相信这是可能的。


问题答案:

出于多样性的考虑:

lambda m, s: next(x for x in (m + np.random.randn() * s for _ in iter(int, 1)) if x >= 0)

一种非递归解决方案,它利用和的两个参数形式iter和两个生成器表达式。

iter(int, 1)调用,int()直到返回为止1,这根本不可能发生。因此内部生成器表达式

(m + np.random.randn() * s for _ in iter(int, 1))

是可以m + np.random.randn() * s无限期评估和产生收益的生成器。外部生成器表达式一一从内部表达式中获取值,但仅产生等于或大于零的值。然后,next函数从外部生成器获取第一个值,该值是内部生成器与条件匹配得出的第一个值。