On 24 Jan., 13:31, mk <mrk...@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). -- http://mail.python.org/mailman/listinfo/python-list