美文网首页利用Python进行数据分析
匿名(Lambda)函数/柯里化:部分参数应用

匿名(Lambda)函数/柯里化:部分参数应用

作者: 庵下桃花仙 | 来源:发表于2018-12-31 21:41 被阅读3次

    通过单个语句生成函数的方式,结果是返回值。Lambda关键字仅表达“我们声明一个匿名函数”。

    匿名函数代码量小,更为清晰,将它作为一个参数进行传值,比写一个完整函数或将匿名函数赋值给局部变量更好。

    In [1]: def apply_to_list(some_list, f):
       ...:     return [f(x) for x in some_list]
       ...:
    
    In [2]: ints = [4, 0, 1, 5, 6]
    In [4]: apply_to_list(ints, lambda x: x * 2)
    Out[4]: [8, 0, 2, 10, 12]
    

    根据字符串中不同字母的数量对一个字符串集合进行排序:

    In [5]: strings = ['foo', 'card', 'bar', 'aaaa', 'abab']
    In [7]: strings.sort(key = lambda x: len(set(list(x))))
    
    In [8]: strings
    Out[8]: ['aaaa', 'foo', 'abab', 'bar', 'card']
    
    In [10]: list('foo')
    Out[10]: ['f', 'o', 'o']
    
    In [11]: set(list('foo'))
    Out[11]: {'f', 'o'}
    
    In [12]: len(set(list('foo')))
    Out[12]: 2
    
    In [13]: list(['foo', 'card'])
    Out[13]: ['foo', 'card']
    
    In [14]: set(list(['foo', 'card']))
    Out[14]: {'card', 'foo'}
    
    In [15]: len(set(list(['foo', 'card'])))
    Out[15]: 2
    

    科里化是计算机科学术语,表示通过部分参数应用的方式从已有的函数中衍生出新的函数。

    In [16]: def add_numbers(x, y):
        ...:     return x + y
        ...:
    
    In [17]: add_five = lambda y: add_numbers(5, y)
    

    这就是柯里化,新函数调用了已经存在的函数。
    functools 模块使用 pratial 函数简化这种处理

    In [18]: from functools import partial
    
    In [19]: add_five = partial(add_numbers,5)
    

    相关文章

      网友评论

        本文标题:匿名(Lambda)函数/柯里化:部分参数应用

        本文链接:https://www.haomeiwen.com/subject/kfgwlqtx.html