为什么这个lambda需要*arg,它有什么区别?

Apa*_*ear 5 python lambda

我遇到了一个非常聪明的小函数,它接受两个函数,在给定参数的情况下将一个函数应用于彼此之上x:

def compose(f,g):
    return lambda *x: f(g(*x))
Run Code Online (Sandbox Code Playgroud)

现在我的问题是*x,因为我没有看到它在这里做了什么.为什么它不简单x(没有星号)?

这是我的测试:

>>> def compose(f,g):
...   return lambda *x: f(g(*x))
... 
>>> this = lambda i: i+1
>>> that = lambda b: b+1
>>> compose(this,that)(2)
4

>>> def compose(f,g):
...   return lambda x: f(g(x))
... 
>>> compose(this,that)(2)
4

>>> def compose(f,g):
...   return lambda *x: f(g(*x))
... 
>>> compose(this,that)(2,2)
TypeError: <lambda>() takes exactly 1 argument (2 given)
Run Code Online (Sandbox Code Playgroud)

Fré*_*idi 5

如果gthat在您的测试中)还可以接受可变数量的参数,则lambda *x: f(g(*x))可能很有用。

否则,不会那么多。

目的是允许使用任意数量的参数调用组合函数,并将所有这些参数传递给组合中的内部函数。

  • 例如:compose(abs,min)(1,2,-5,-3,-6,12,-9) (3认同)