gpt4 book ai didi

python - 部分函数与 lambda 的映射列表

转载 作者:太空狗 更新时间:2023-10-29 16:53:35 25 4
gpt4 key购买 nike

我想知道对于大多数示例来说,使用 lambda 是否更“pythonic”或 partial功能?

例如,我可能想申请 imap在某些列表上,例如使用以下方法向每个元素添加 3:

imap(lambda x : x + 3, my_list)

或使用 partial :

imap(partial(operator.add, 3), my_list)

我意识到在这个例子中一个循环可能会更容易完成它,但我正在考虑更多不平凡的例子。

在 Haskell 中,我很容易在上面的示例中选择部分应用程序,但对于 Python 我不确定。对我来说,lambda 似乎是更好的选择,但我不知道大多数 python 程序员的主流选择是什么。

最佳答案

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

(x + 3 for x in mylist)

imap 一样,这不会立即构建一个完整的新列表,而是按需计算结果序列的元素(因此如果您是将结果链接到另一个迭代中)。

如果您好奇在现实世界中 partial 哪里比 lambda 更好,当您处理可变数量的参数:

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

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

>>> b = lambda *args: a(2, 3, *args)
>>> b(6, 7, 8)
26

稍微不够简洁 - 但 lambda 确实为您提供了乱序应用程序的选项,而 partial 没有:

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

关于python - 部分函数与 lambda 的映射列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5240427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com