【问题标题】:Black lambda Magic黑 lambda 魔法
【发布时间】:2014-03-20 21:18:59
【问题描述】:

在 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,请赐教。

【问题讨论】:

    标签: python lambda scipy


    【解决方案1】:

    这里的 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

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

    【讨论】:

    • 感谢提及可迭代对象
    【解决方案2】:

    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)
    

    【讨论】:

    • 您的示例将理论知识与实际示例联系起来 THX
    猜你喜欢
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 2016-12-05
    • 2020-07-01
    • 1970-01-01
    相关资源
    最近更新 更多