lambda函数内部的python迭代过程

rth*_*rth 3 python lambda loops

我有一个简单的python 函数

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

是否有可能使用lambda做同样的技巧?它需要在lambda中进行迭代,但我仍然相信它是可能的.

vau*_*tah 5

为了多样性:

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

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

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

(m + np.random.randn() * s for _ in iter(int, 1))
Run Code Online (Sandbox Code Playgroud)

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