【发布时间】:2014-07-14 10:14:17
【问题描述】:
我开始学习 Haskell,事实证明,在那里,您可以使列表推导式成为部分应用的函数。换句话说,它返回一个接受列表的函数,然后在列表上运行列表推导。
例子:
boomBangs xs = [ if x < 10 then "BOOM!" else "BANG!" | x <- xs, odd x]
boomBangs can then be called with the actual "xs" argument.
我的问题:有没有办法在 Python 中做到这一点?我四处寻找,找不到路,但我可能遗漏了一些东西。
能够做到这一点非常有价值。
编辑:
我的意思似乎有些混乱。
我希望能够定义列表理解而不必给它提供列表以处理直到以后。
这个想法是,列表推导实际上变成了一个接受一个参数的函数,即要处理的列表。
例如我可以这样做:
my_new_func = [x*2 for x in l] # l is **not defined**
然后在代码后面的某个地方:
my_new_func(range(10)) # Returns the answer
这是一种非常好的函数式编程方式。
第二次编辑:
这是一种做我想做的事情的方法,但我想知道是否有更好的方法:
boomBangs = lambda lst: [actual list comprehension]
boomBangs(range(10))
【问题讨论】:
-
你不能只做一个接受列表并做你需要做的函数吗?
-
@SukritKalra 我宁愿避免为此创建一个函数,这个想法是为了让语法更容易。有关您的建议,请参阅我的第二次编辑。
-
不幸的是,Python 没有提供您正在寻找的那种列表解析(在 Haskell 中已经找到)。创建一个 lambda 或一个函数将是这里的方法。
-
Haskell 代码创建了一个函数。我错过了什么?
-
是的,
boomBangs xs = ...只是定义函数的 Haskell 符号;例如addOne x = x + 1。与部分应用无关。
标签: python haskell functional-programming list-comprehension