部分函数与lambda的地图列表

Zac*_*h L 16 python

我想知道对于大多数例子来说,使用它还是更具"pythonic" 功能lambda还是partial功能?

例如,我可能想要应用于imap某些列表,例如使用以下内容为每个元素添加3:

imap(lambda x : x + 3, my_list)
Run Code Online (Sandbox Code Playgroud)

或者使用partial:

imap(partial(operator.add, 3), my_list)
Run Code Online (Sandbox Code Playgroud)

我意识到在这个例子中循环可能更容易实现它,但我正在考虑更多非平凡的例子.

在Haskell中,我会在上面的例子中轻松选择部分应用程序,但我不确定Python.对我来说,lambda似乎是更好的选择,但我不知道大多数python程序员的主流选择是什么.

Amb*_*ber 17

要真正等效imap,请使用生成器表达式:

(x + 3 for x in mylist)
Run Code Online (Sandbox Code Playgroud)

比如imap,这不会立即构建一个完整的新列表,而是按需计算结果序列的元素(因此,如果将结果链接到另一个迭代中,则比列表解析更有效).

如果你对在哪里partiallambda现实世界更好的选择感到好奇,那么当你处理可变数量的参数时,它往往是:

>>> from functools import partial
>>> def a(*args):
...     return sum(args)
... 
>>> b = partial(a, 2, 3)
>>> b(6, 7, 8)
26
Run Code Online (Sandbox Code Playgroud)

使用的等效版本lambda将是......

>>> b = lambda *args: a(2, 3, *args)
>>> b(6, 7, 8)
26
Run Code Online (Sandbox Code Playgroud)

这稍微简洁一点 - 但lambda确实为您提供了无序应用程序的选项,但partial它没有:

>>> def a(x, y, z):
...    return x + y - z
...
>>> b = lambda m, n: a(m, 1, n)
>>> b(2, 5)
-2
Run Code Online (Sandbox Code Playgroud)


Dim*_*try 5

在给定的示例中,lambda似乎是最合适的.它的眼睛也更容易.

我从未见过在野外使用部分功能.

  • 赞成使用"在野外" - 在丛林中与蟒蛇对吗? (3认同)