黑色lambda魔术

时间:2014-03-20 21:18:59

标签: python lambda scipy

在scipy.splev中我找到了这段代码:

def splev( x, tck, int der=0, int ext=0):

    t,c,k = tck
    try:
        c[0][0]
        parametric = True
    except:
        parametric = False
    if parametric:
        return list(map(lambda c, x=x, t=t, k=k, der=der: splev(x, [t,c,k], der, ext), c ))
    else:
        .
        .
        .
    return y.reshape(shape)

我无法理解lambda,请赐教。

2 个答案:

答案 0 :(得分:0)

lambdas只是未命名的函数。你可以这样写:

def splev( x, tck, int der=0, int ext=0):

    t,c,k = tck

    def otherfxn(c, x=x, t=t, k=k, der=der):
        return splev(x, [t,c,k], der, ext)

    try:
        c[0][0]
        parametric = True
    except:
        parametric = False
    if parametric:
        return list(map(otherfxn, c))
    else:
        .
        .
        .
    return y.reshape(shape)

答案 1 :(得分:0)

这里的lambda函数:

lambda c, x=x, t=t, k=k, der=der: splev(x, [t,c,k], der, ext)

与:

相同
def anonymous_lambda_function(c, x=x, t=t, k=k, der=der):
    return splev(x, [t,c,k], der, ext)

和map将此函数映射到可迭代的元素c

{2}中的list(map(...))是多余的,但它在Python 3中是必需的,因此它保留了代码的向前兼容性。