natknąłem się na dość sprytny funkcji, które ma dwie funkcje, obowiązuje jedna na siebie podano argument x
:Dlaczego ta lambda wymaga * arg, jaka to różnica?
def compose(f,g):
return lambda *x: f(g(*x))
Teraz mój problem jest z *x
, a ja nie widzę naprawdę robi cokolwiek tutaj. Dlaczego nie może być proste x
(bez gwiazdki)?
Oto moje testy:
>>> 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)
@jonrsharpe, podczas gdy wyjaśnia '*'/'**' - Nie sądzę, że wyjaśnia kontekst tego pytania –