◐ Shell
clean mode source ↗

Issue 2283: lambda *a, **k: a, k # does not work

According to the docs lambda can handle the same parameter list as can
def. But this does not appear to be the case as the following (both
2.5.1 and 30a3) shows:

>>> def f(*a, **kw): return a, kw

>>> f(1,2,a=3,b=4)
((1, 2), {'a': 3, 'b': 4})
>>> A = lambda *a: a
>>> A(1,2)
(1, 2)
>>> K = lambda **k: k
>>> K(a=1,b=2)
{'a': 1, 'b': 2}
>>> X = lambda *a, **k: a, k
Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    X = lambda *a, **k: a, k
NameError: name 'k' is not defined

So either this is an interpreter bug, or a doc bug.
This is not a bug, just missing parenthesis.
>>> lambda x: x,x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>> lambda x: (x,x)
<function <lambda> at 0x8293e2c>
On 2008-03-13, Imri Goldberg wrote:
> Imri Goldberg <lorgandon@gmail.com> added the comment:
>
> This is not a bug, just missing parenthesis.
>
> >>> lambda x: x,x
>
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> NameError: name 'x' is not defined
>
> >>> lambda x: (x,x)
>
> <function <lambda> at 0x8293e2c>

Yes, sorry.

(But I don't seem to have the ability to make the bug resolved or
deleted.)