Lambda和Python中的函数

Sum*_*mod 16 python

我有两个问题的初学者

  1. 是什么*z*foo**foo关于Python函数的意思.
  2. 这有效 - 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)