Map list by partial function vs lambda
我想知道在大多数例子中,使用
例如,我可能想在一些列表上应用
1 | imap(lambda x : x + 3, my_list) |
或使用
1 | imap(partial(operator.add, 3), my_list) |
我意识到在这个例子中,一个循环可能可以更容易地完成它,但是我正在考虑更多的非平凡的例子。
在Haskell中,在上面的示例中,我很容易选择部分应用程序,但我不确定是否使用Python。对我来说,lambda似乎是更好的选择,但我不知道对于大多数Python程序员来说,流行的选择是什么。
要真正等同于
1 | (x + 3 for x in mylist) |
与
如果你想知道在现实世界中,
1 2 3 4 5 6 7 | >>> from functools import partial >>> def a(*args): ... return sum(args) ... >>> b = partial(a, 2, 3) >>> b(6, 7, 8) 26 |
使用
1 2 3 | >>> b = lambda *args: a(2, 3, *args) >>> b(6, 7, 8) 26 |
这稍微不那么简洁-但
1 2 3 4 5 6 | >>> def a(x, y, z): ... return x + y - z ... >>> b = lambda m, n: a(m, 1, n) >>> b(2, 5) -2 |
在给定的示例中,lambda似乎最合适。对眼睛也比较容易。
我从未见过在野外使用部分函数。
lambda当然是常见的许多倍。除非您在学术环境中进行函数式编程,否则您应该避免使用函数工具。
这是Python。不需要库,甚至不需要内置,只需要一个简单的生成器表达式。
1 | ( x + 3 for x in my_list ) |
这将创建一个类似于IMAP的生成器。如果你想从中列出一个清单,用清单理解代替:
1 | [ x + 3 for x in my_list ] |