#函數的prototype(加上* 和 ** 符號)
def functionName(para,*tup_para,**dic_para):
print para
for each in tup_para:
print each
for k,v in dic_para.items():
print k,v
##使用時須加上*和**符號解析之
>>> functionName('stayhigh',*(1,2,3),**{'k1':'v1','k2':'v2'})
stayhigh
1
2
3
k2 v2
k1 v1
##若不使用*和**符號
則將tup_para與dic_para當成tuple的元素並解析之
#此時(1,2,3),{'k1':'v1','k2':'v2'}皆為tup_para的元素
(1, 2, 3)
{'k2': 'v2', 'k1': 'v1'}
#若要使用參數默認值,則函數原形為(不須加上*和 **符號)
def functionName(para='dname',tup_para=(1,2),dic_para={'k1':'v1'}):
print para
for each in tup_para:
print each
for k,v in dic_para.items():
print k,v
>>> functionName()
dname
1
2
k1 v1
>>> functionName('stayhigh',(3,4),{'mykey':'myvalue'})
stayhigh
3
4
mykey myvalue
#最常見的使用方式
def fstandard(arg='stayhigh',*args,**kwargs):
print 'arg:',arg
print 'args:',args
print 'kwargs:',kwargs
>>> fstandard(1,2,3,mykey1='myvalue1',mykey2='myvalue2')
arg: 1
args: (2, 3)
kwargs: {'mykey2': 'myvalue2', 'mykey1': 'myvalue1'}
使用apply函數的優點:
參考至:http://www.cnpythoner.com/post/90.html
。做pys60时UI构造比较麻烦,有apply的话,用一个列表来构造整个程序的数个界面就不是问题了。主要还是参数的给出非常灵活,可以把已有的一个列表或者字典直接丢过去。
#python 2.5以上版本,對於apply函數的建議
apply(object[, args[, kwargs]]) -> value
Call a callable object with positional arguments taken from the tuple args,
and keyword arguments taken from the optional dictionary kwargs.
Note that classes are callable, as are instances with a __call__() method.
Deprecated since release 2.3. Instead, use the extended call syntax:
function(*args, **keywords).
#使用kwargs需要注意的小細節
>>> def dfunc(**kwargs):
for k,v in kwargs.items():
print k,'->',v
#使用a=1,b=2的參數形式傳遞
>>> dfunc(a=1,b=2)
a -> 1
b -> 2
#使用**{'a':1,'b':2}的參數形式傳遞
>>> dfunc(**{'a':1,'b':2})
a -> 1
b -> 2
沒有留言:
張貼留言