利用Python进行数据分析

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

2018-12-31  本文已影响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)
上一篇下一篇

猜你喜欢

热点阅读