Python函數參數總結

來源:互聯網
上載者:User

作為一個沒有系統學習過python,卻要與之日日相對看源碼的人,真尼瑪痛苦啊。。。經常看到**kws之類的,心中狂虐:這啥?指標的指標?!T^T

昨天看《Python核心編程》的時候,剛好看到了函數部分,於是順勢將目前接觸到的集中參數類型都總結一下吧^^

總的來說,除去普通的normal args,python中比較特別的函數參數有:關鍵字參數、預設參數、非關鍵字可變長參數(元組)、關鍵字可變長參數(字典),下面將結合例子進行介紹。

關鍵字參數:調用時指定參數的名稱,且與函式宣告時的參數名稱一致。使用關鍵字參數允許函數調用時參數的順序與聲明時不一致,僅根據參數的指定進行賦值。例:

# 函數定義def foo(x, y):    print 'x is %s' % x    print 'y is %s' % yif __name__ == '__main__':    # 標準調用    foo(1, 2)    # 關鍵字調用    foo(y = 1, x = 2)

在標準調用中,x和y依次為1和2;在關鍵字調用中,x和y的值根據名字指定而與順序無關。

# 標準調用輸出x is 1y is 2# 關鍵字調用輸出x is 2y is 1

 

預設參數:在函式宣告時,指定形參的預設值,調用時可不傳入改參數(使用預設值)。例:

def tax(cost, rate = 0.17):    print cost * (1 + rate)    if __name__ == '__main__':    # rate使用預設值0.17    tax(1000)        # rate指定為0.05    tax(1000, 0.05)

使用預設值時,rate為0.17,結果為1170;在指定參數rate時,rate為0.05,結果為1050。

# tax(1000)的輸出1170.0# tax(1000, 0.05)的輸出1050.0

 

非關鍵字可變長參數(元組):“非關鍵字”“可變長”顧名思義是允許在調用時傳入多個“非關鍵字”參數,python會將這些多出來的參數放入一個元組中。例:

# 定義函數,其中*theRest為非關鍵字可變長參數def tupleVarArgs(arg1, arg2='defaultB', *theRest):    print 'formal arg 1: ', arg1    print 'formal arg 2: ', arg2    for eachXtrArg in theRest:        print 'another arg: ', eachXtrArg

我們採用多種調用方式來查看結果,從而理解非關鍵字可變長參數的使用:

>>> tupleVarArgs('abc')formal arg 1:  abcformal arg 2:  defaultB
>>> tupleVarArgs('abc', 'def')formal arg 1: abcformal arg 2: def
>>> tupleVarArgs('abc', 'def', 'xyz', 123.4)formal arg 1: abcformal arg 2: defanother arg: xyzanother arg: 123.4

 

關鍵字可變長參數(字典):“關鍵字”“可變長”顧名思義是允許在調用時傳入多個“關鍵字”參數,python會將這些多出來的<參數名, 參數值>放入一個字典中。需要注意的是,關鍵字變數參數應該為函數定義的最後一個參數,帶**。例:

# 定義函數,其中**theRest為關鍵字可變長參數def dictVarArgs(arg1, arg2='defaultB', **theRest):    print 'formal arg 1: ', arg1    print 'formal arg 2: ', arg2    for eachXtrArg in theRest.keys():        print 'Xtra arg %s: %s' % (eachXtrArg, str(theRest[eachXtrArg]))

我們採用多種調用方式來查看結果,從而理解關鍵字可變長參數的使用:

>>> dictVarArgs('abc')formal arg 1:  abcformal arg 2:  defaultB>>> dictVarArgs('abc', 'def')formal arg 1:  abcformal arg 2:  def# a=1和b='aha'即為關鍵字可變參數,他們會被放入theRest字典>>> dictVarArgs('abc', 'def', a=1, b='aha')formal arg 1:  abcformal arg 2:  defXtra arg a: 1Xtra arg b: aha# 全部採用關鍵字參數,但只有a和b是可變的,會被放入theRest>>> dictVarArgs(arg2='def', a=1, b='aha', arg1='put at the last')formal arg 1:  put at the lastformal arg 2:  defXtra arg a: 1Xtra arg b: aha# 這次使用了arg2的預設值>>> dictVarArgs('one', a=1, b='aha', name=('yuki', 'lau'))formal arg 1:  oneformal arg 2:  defaultBXtra arg a: 1Xtra arg b: ahaXtra arg name: ('yuki', 'lau')

 

注意

當非關鍵字可變長參數和關鍵字可變長參數出現在同一個函數中時,他們應當遵守如下的順序約定:

def newfoo(normal_arg1, normal_arg2, *non-keywords, ** keywords):    pass

當然,你也可以直接向函數中傳入元組和字典對象,如:

>>> newfoo(2, 4, *(6, 8), **{'foo': 10, 'bar': 12})

也可以來個“混搭”,孤立的可變長參數將會被放入對應的tuple或dict中,如:

>>> newfoo(2, 4, 3, x=4, y=5, *aTuple, **aDict)

在這個例子中,參數3會被放入aTuple,參數x=4和y=5會被放入aDict

 

當然關於Python函數的參數問題還有很多,本文僅僅介紹幾種常用的情況,僅做個簡單的瞭解和參考。

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.