在 2012年2月17日星期五UTC+8下午5时55分11秒,Nobody写道: > On Fri, 17 Feb 2012 16:53:00 +0900, Zheng Li wrote: > > > def method1(a = None): > > print a > > > > i can call it by > > method1(*(), **{'a' : 1}) > > > > I am just curious why it works and how it works? > > and what do *() and **{'a' : 1} mean? > > In a function call, an argument consisting of * followed by an expression > of tuple type inserts the tuple's elements as individual positional > arguments. An argument consisting of ** followed by an expression of > dictionary type inserts the dictionary's elements as individual keyword > arguments. > > So if you have: > > a = (1,2,3) > b = {'a': 1, 'b': 2, 'c': 3} > > then: > > func(*a, **b) > > is equivalent to: > > func(1, 2, 3, a = 1, b = 2, c = 3) > > > when I type *() in python shell, error below happens > > > > File "<stdin>", line 1 > > *() > > ^ > > SyntaxError: invalid syntax > > The syntax described above is only valid within function calls. > > There is a similar syntax for function declarations which does the reverse: > > > def func(*a, **b): > print a > print b > > > func(1, 2, 3, a = 1, b = 2, c = 3) > (1, 2, 3) > {'a': 1, 'c': 3, 'b': 2}
In the functional programming view, 2 to 5 object parameters are enough to invoke a function. But the tuple and dictionary packing and unpacking are not free in the run time. Enhancement to operations of basic types in Python can speed up everything. -- http://mail.python.org/mailman/listinfo/python-list