问题描述
给出n
,我想创建一个函数,该函数接受n
元素并将它们作为列表返回。一种方法:
def g(n):
def f(*l):
assert len(l) == n
return l
return f
结果将像这样工作,但对于所有n
:
def g(n):
if n == 1: return lambda i: [i]
if n == 2: return lambda i1: lambda i2: [i1,i2]
if n == 3: return lambda i1: lambda i2: lambda i3: [i1,i2,i3]
...
我的第一种方法是这样的:
def g(n):
if n == 1: return lambda i: [i]
return lambda i: g(n-1) + [i]
这不起作用:g(n-1)
返回一个函数,因此无法将其添加到列表中。有解决办法吗?
似乎我需要以某种方式将输入“传递”到g(n-1)
,获得g(n-1)
的输出,并附加到[i]
,但我不知道该如何“撬开” g(n-1)
进行附加操作,同时保持正确的输入类型。
我尝试在python中使用Google谷歌搜索,但仅得到一些基本示例。我是函数式编程的新手,如果缺少我的术语,对不起。
解决方法
我想到了这个
def f(n,prev=None):
if prev is None:
prev = []
if n == 1:
return lambda x: prev + [x]
else:
return lambda x: f(n-1,prev=prev + [x])
# f(3) creates list with length 3
# other calls append one element to the list,until length 3 is reached
assert f(3)(1)(2)(3) == [1,2,3]