我想知道对于大多数例子来说,使用它还是更具"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,这不会立即构建一个完整的新列表,而是按需计算结果序列的元素(因此,如果将结果链接到另一个迭代中,则比列表解析更有效).
如果你对在哪里partial比lambda现实世界更好的选择感到好奇,那么当你处理可变数量的参数时,它往往是:
>>> 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)