lambda函数内部的python迭代过程

时间:2017-02-28 21:21:48

标签: python loops lambda

我有一个简单的python 功能

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

是否可以使用 lambda 执行相同的操作?它需要在lambda中进行迭代,但我仍然相信它是可能的。

2 个答案:

答案 0 :(得分:5)

为了多元化的目的:

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

答案 1 :(得分:4)

positive_gauss = lambda mean, stddev, result = -1: positive_gauss(mean, stddev, mean + np.random.randn()*stddev) if result < 0 else result 

这是一个递归函数。我会把它分解 -

lambda mean, stddev, result = -1:  # takes 3 parameters 
    positive_gauss(mean, stddev, mean + np.random.randn()*stddev) if result < 0 
    # ^ Your first condition, if its true call the same function modifying result
    else result # if the above one fails just return result.

是的,作为@ juanpa.arrivillaga,不应该使用它,因为它失去了匿名函数的本质。