歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

談Python函數的參數處理

以下幾種函數定義
def funcion(a,b):
    print a,b

function(1,2)

def function1(*a):
    print a      <=打印元組

function1(1,2,3)

def function2(**a):
    print a      <=打印字典

function2(name='zzj',age=30)

def function3(*a,**b):
    print a,b    <=打印元組+字典

function3(1,2,3,name='zzj',age=30)

調用,需要人為的構造實參.如果我們有現成的元組和字典,想作為實參應該怎麼辦?

如我們經過一系列的動作得知了一個元組aTuple,想將其作為實參,

難道function1(aTuple)?
返回是一個((aTuple),)將其aTuple作為一個元組元素,不是我們想要的,我們想要的是將aTuple元組元素作為*a的元素,所以,我們這裡需要調用apply函數來處理這樣的事情
apply(function1,aTuple)

code
>>> aTuple=(1,2,3,4)
>>> function1(aTuple)
((1, 2, 3),)
>>> apply(function1,aTuple)
(1, 2, 3, 4)

同樣的道理我們的實參是一個字典aDict呢?如果以function2(aDict),呵呵,不能以aDict作為實參,那麼可以用apply來實現嗎?可以,請看如下code演示,所以後期如果你的參數是以元組或者字典組成或者參數,元組,字典三者混合,那麼不需要考略如何將其轉換成原始調用模式,可以考略下使用apply功能來完成.

code
>>> aDict
{'age': 30, 'name': 'zzj'}
>>> function2(name='zzj',age=30)
{'age': 30, 'name': 'zzj'}
>>> function2(aDict)           
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: function2() takes exactly 0 arguments (1 given)

>>> apply(function2,(),aDict)
{'age': 30, 'name': 'zzj'}

最後展示下用apply函數來處理參數,元組,字典三者混合的案例

code
>>> def function4(a,b,c,*d,**e):
...    print a,b,c,d,e
...
>>> arg1=1
>>> arg2=2
>>> arg3=3
>>> aTuple=(4,5,6)
>>> aDict={'name':'zzj','age':30}
>>> apply(function4,(arg1,arg2,arg3,aTuple),aDict)
1 2 3 ((4, 5, 6),) {'age': 30, 'name': 'zzj'}
>>>
注意,實參與形參的順序,一定要對應上,否則就不是你想要的值了.

通過以上實例相信大家對python中函數定義的參數有一定的玩法了(包括可變參數的概念*a,**b),並且提供apply函數來實現更加靈活的調用.

Copyright © Linux教程網 All Rights Reserved