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
函数从外部生成器获取第一个值,该值是内部生成器与条件匹配得出的第一个值。