What's the business with the asterisk?
Kay Schluehr
kay.schluehr at gmx.net
Sat Jan 24 08:49:16 EST 2009
On 24 Jan., 13:31, mk <mrk... at gmail.com> wrote:
> Hello everyone,
>
> From time to time I spot an asterisk (*) used in the Python code
> _outside_ the usual *args or **kwargs application.
>
> E.g. here:http://www.norvig.com/python-lisp.html
>
> def transpose (m):
> return zip(*m)
> >>> transpose([[1,2,3], [4,5,6]])
> [(1, 4), (2, 5), (3, 6)]
>
> What does *m mean in this example and how does it do the magic here?
>
> Regards,
> mk
If zip is specified as
def zip(*args):
...
one can pass zero or more arguments into zip. In the zip body one has
access to the argument tuple args. So zip(a, b, c) yields args = (a,
b, c). Now suppose you want to pass the tuple t = (a, b, c) to zip. If
you call zip(t) then args = ((a, b, c),). When calling zip(*t) instead
the tuple is passed as variable arguments just like they are specified
in the signature of zip. So args = (a, b, c).
Same holds for
def foo(**kwd):
...
and foo(**kwd) versus foo(kwd).
More information about the Python-list
mailing list