我有两个问题的初学者
*z或*foo或**foo关于Python函数的意思.a = lambda *z :z但这不是 - a = lambda **z: z.因为它应该采用0参数.这究竟意味着什么?koj*_*iro 20
*z而**z在Python是指指定参数和kwargs.args是位置参数,kwargs是关键字参数.lambda **z在你的例子中不起作用,因为z它不是一个关键字参数:它只是位置.比较这些不同的结果:
>>> a = lambda z: z
>>> b = lambda *z: z
>>> c = lambda **z: z
>>> a([1,2,3])
[1, 2, 3]
>>> b([1,2,3])
([1, 2, 3],)
>>> c([1,2,3]) # list arg passed, **kwargs expected
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: <lambda>() takes exactly 0 arguments (1 given)
>>> c(z=[1,2,3]) # explicit kwarg
{'z': [1, 2, 3]}
>>> c(x=[1,2,3]) # explicit kwarg
{'x': [1, 2, 3]}
>>> c({'x':[1,2,3]}) # dict called as a single arg
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: <lambda>() takes exactly 0 arguments (1 given)
>>> c(**{'x':[1,2,3]}) # dict called as **kwargs
{'x': [1, 2, 3]}
>>> b(*[1,2,3]) # list called as *args
(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)