参数数目可变的Python curried函数

参数数目可变的Python curried函数,python,functional-programming,currying,Python,Functional Programming,Currying,给定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

给定
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搜索咖喱,但我只得到了一些基本的例子。我是函数式编程新手,如果我的术语不全,我很抱歉。

我想到了这个:

def(n,prev=None):
如果prev为无:
prev=[]
如果n==1:
返回λx:prev+[x]
其他:
返回λx:f(n-1,prev=prev+[x])
#f(3)创建长度为3的列表
#其他调用将一个元素附加到列表中,直到达到长度3为止
断言f(3)(1)(2)(3)=[1,2,3]