Python函數(shù)的參數(shù)類型和使用技巧詳解
Python函數(shù)的參數(shù)類型和使用技巧詳解
先來定義一個計算體重指數(shù)(BMI)的函數(shù)。
體重指數(shù)就是體重與身高的平方之比,其中體重以千克為單位,身高以米為單位。
def bmi(height, weight, name): i = weight/height**2 print('%s的體重指數(shù)為%0.1f'%(name, i)) bmi(1.75, 75, 'Xufive') #Xufive的體重指數(shù)為24.5
自定義函數(shù)bmi有三個參數(shù),每個參數(shù)都有明確的含義。
調(diào)用這個函數(shù)時,必須按照定義的順序傳入這三個參數(shù),缺一不可。
這也是Python函數(shù)最基本的參數(shù)傳遞規(guī)則。
接下來把bmi函數(shù)稍微改造一下,給name參數(shù)指定一個默認值。
def bmi(height, weight, name='您'): i = weight/height**2 print('%s的體重指數(shù)為%0.1f'%(name, i)) bmi(1.75,75) # 可以不傳遞name參數(shù),使用默認值 #您的體重指數(shù)為24.5 bmi(1.75,75,'Xufive') # 也可以傳遞name參數(shù) #Xufive的體重指數(shù)為24.5
現(xiàn)在bmi函數(shù)就有了兩種類型的參數(shù):weight和height,它們是函數(shù)調(diào)用時必不可少的參數(shù),且順序必須與函數(shù)定義的保持一致,這樣的參數(shù)稱為 位置參數(shù)
;
name是函數(shù)調(diào)用時可有可無的參數(shù)(如未提供,則使用默認值),這樣的參數(shù)稱為 默認參數(shù)
。
默認參數(shù)可以有多個。
為了使結(jié)果更準確,可以考慮使用最近一段時期內(nèi)多個體重的均值來計算體重指數(shù),這就意味著需要輸入多個體重值。
我們固然可以一個體重的元組或列表傳給weight,但這樣weight和height就不是同一種類型了,在形式上失去了美感,在使用時也容易產(chǎn)生誤會。最好的方式就是讓函數(shù)可以接受不確定個數(shù)的體重參數(shù)。
def bmi(height, *args, name='您'): i = (sum(args)/len(args))/height**2 print('%s的體重指數(shù)為%0.1f'%(name, i)) bmi(1.75, 75, name='xufive') #xufive的體重指數(shù)為24.5 bmi(1.75, 75, 74) #您的體重指數(shù)為24.3 bmi(1.75, 75, 74, 75.5, 74.7, name='xufive') #xufive的體重指數(shù)為24.4
實際上,像下面這樣調(diào)用函數(shù)也沒有問題。
weight = [75, 74, 75.5, 74.7] bmi(1.75, *weight, name='xufive') #xufive的體重指數(shù)為24.4
這下就有點復(fù)雜了,bmi函數(shù)有了三種類型的參數(shù)。除了位置參數(shù)和默認參數(shù),又多了一種 可變參數(shù)
,即bmi函數(shù)可以接受不限數(shù)量的參數(shù)。在函數(shù)定義時,可變參數(shù)名前面冠以“*”號;在函數(shù)體內(nèi),可變參數(shù)相當于一個元組。
如此一來,就產(chǎn)生了一個新的問題:三種類型的參數(shù)應(yīng)該以怎樣的順序被定義呢?
位置參數(shù)排在首位,這一點沒有異議。默認參數(shù)原則上放在最后,但調(diào)用時必須加上參數(shù)名(如上面的例子),否則函數(shù)無法區(qū)分究竟是可變參數(shù)還是默認參數(shù)。
默認參數(shù)也可以放在可變參數(shù)之前(不建議這樣做),但調(diào)用時不能使用參數(shù)名,即便使用默認值也不能省略參數(shù),否則函數(shù)會用后面的可變參數(shù)的第一個值(如果有的話)強制為其賦值。
下面說一說更復(fù)雜的情況。除了上面介紹的三種類型的參數(shù)外,Python函數(shù)還支持第四種類型的參數(shù): 關(guān)鍵字參數(shù)
。
關(guān)鍵字參數(shù)由不限數(shù)量的鍵值對組成。在函數(shù)定義時,關(guān)鍵字參數(shù)名前面冠以“**”號;在函數(shù)體內(nèi),關(guān)鍵字參數(shù)相當于一個字典。
def bmi(height, *args, name='您', **kwds): i = (sum(args)/len(args))/height**2 print('%s的體重指數(shù)為%0.1f'%(name, i)) for key in kwds: print('%s的%s是%s'%(name, key, str(kwds[key]))) bmi(1.75, 75, 74, 75.5, 74.7, name='Xufive') Xufive的體重指數(shù)為24.4 bmi(1.75, 75, 74, name='Xufive', 性別='男', 愛好='攝影') #Xufive的體重指數(shù)為24.3 #Xufive的性別是男 #Xufive的愛好是攝影 bmi(1.75, 75, 74, 性別='男', 愛好='攝影', name='Xufive') #Xufive的體重指數(shù)為24.3 #Xufive的性別是男 #Xufive的愛好是攝影 bmi(1.75, 75, 74, 75.5, 74.7, 性別='男', 愛好='攝影') #您的體重指數(shù)為24.4 #您的性別是男 #您的愛好是攝影
如果一個函數(shù)同時具備了上述四種類型的參數(shù),函數(shù)定義時參數(shù)的正確順序應(yīng)該是位置參數(shù)排在首位,可變參數(shù)次之,默認參數(shù)再次之,關(guān)鍵字參數(shù)排在末尾。
函數(shù)調(diào)用時,如果需要指定默認參數(shù),其參數(shù)名不能省略,位置在可變參數(shù)之后,可以在關(guān)鍵字參數(shù)之前,也可以在其后,也可以混雜其中。
到此這篇關(guān)于Python函數(shù)的參數(shù)類型和使用技巧詳解的文章就介紹到這了,更多相關(guān)Python函數(shù)的參數(shù)類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python調(diào)整數(shù)組形狀如何實現(xiàn)
這篇文章主要介紹了Python調(diào)整數(shù)組形狀如何實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-12-12詳解python uiautomator2 watcher的使用方法
這篇文章主要介紹了python uiautomator2 watcher的使用方法,該方是基于uiautomator2如下版本進行驗證,本文給大家介紹的非常詳細,需要的朋友可以參考下2019-09-09詳解python數(shù)據(jù)結(jié)構(gòu)之棧stack
這篇文章主要介紹了詳解python數(shù)據(jù)結(jié)構(gòu)之棧stack,文中有非常詳細的代碼示例,對正在學(xué)習(xí)python的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05詳解Python中映射類型的內(nèi)建函數(shù)和工廠函數(shù)
這篇文章主要介紹了詳解Python中映射類型的內(nèi)建函數(shù)和工廠函數(shù),目前Python的內(nèi)建映射類型只有字典一種,需要的朋友可以參考下2015-08-08Python unittest單元測試openpyxl實現(xiàn)過程解析
這篇文章主要介紹了Python unittest單元測試openpyxl實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-05-05Python實現(xiàn)多子圖繪制系統(tǒng)的示例詳解
這篇文章主要介紹了如何利用python實現(xiàn)多子圖繪制系統(tǒng),文中的示例代碼講解詳細,具有一定的的參考價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-09-09