我遇到了一个非常聪明的小函数,它接受两个函数,在给定参数的情况下将一个函数应用于彼此之上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)
如果g(that在您的测试中)还可以接受可变数量的参数,则lambda *x: f(g(*x))可能很有用。
否则,不会那么多。
目的是允许使用任意数量的参数调用组合函数,并将所有这些参数传递给组合中的内部函数。
| 归档时间: |
|
| 查看次数: |
227 次 |
| 最近记录: |