【Python】函數參數類型及用法


 一、函數的參數類型

def hs(a1,a2,a3,...):

****statements

其中a1,a2,a3是函數的參數,函數的參數類型可分為:必須參數、默認參數、可變參數(不定長參數)、關鍵字參數、組合參數,總共5種。

 

 

 

二、必須參數

其實我們之前舉得例子就是必須參數,以下例子必須參數:

 

>>>def hello(str):
....     print('必須參數是:',str)
>>>hello('hello,world')

 

 我們可以看到在函數hello中,str作為一個參數,是形參,這形參個類型取決於你調用時輸入的實參類型,我們這里調用函數hello時,傳入了一個字符串'hello,world',那么這個實參的類型就是字符串,所以形參str的類型也是字符串,所以當我們調用函數hello時傳入‘hello,world’,就會執行函數里面的print語句,在屏幕上顯示出如圖所示:

 

值得注意的是,我們在定義函數時形參數量只有一個,因此在調用函數時傳入實參也必須是一個!如果傳入的實參數量多余形參數量會出現錯誤,如圖所示:

  •  傳入實參數量多於形參數量會報錯

  • 實參數量少於形參數量

第二個注意的是,當傳入實參數量少於形參數量時也會報錯!形參有一個參數,調用函數時不傳入參數,如圖:

 

 

二、默認參數

默認參數就是定義函數時,形參給定一個值。

>>>def hs(name,age=23):

......   print('我叫:',name)

......    print('我今年',age)

>>>hs('王二',23)

 

 

【省略默認參數】

默認參數例子

 

省略實參23得到結果

 從以上例子可以看,以上函數用了兩個形參,調用函數時輸入了兩個實參,我們可以試一下省略實參23,看能不能得到結果,請看圖:

 

 

 

【改變默認參數的值】

 我們可以發現,我們省略實參23后,仍然能得到有實參23時的結果,這是因為我們定義函數時,形參中已經賦了一個值,當我們調用函數時,如果沒有給默認形參一個值作為實參,那么就會調用默認形參的值作為實參,因此會得到默認的值;如果我們在調用函數時輸入了一個非默認形參值,這時候默認形參的值會發生變化,變為輸入的那個值!如圖所示:

 

 要注意的是,我們調用函數時也可以輸入‘參數名=值’ 這樣的形式,如圖所示:

 

 

 

參數名=

重點來了:當存在默認參數和必須參數兩種以上參數時,調用函數時一定要注意:

a : 調用函數時,實參的形式為都帶參數名,如上圖形式

b : 一個參數帶參數名,另一個參數不帶參數名,其中默認參數必須帶參數名

c : 如果形參中默認參數在必須參數之前,那么調用函數時實參中默認參數也應當在前面;如果形參中默認參數在必須參 數之后,那么調用函數時實參中默認函數應當在后面,否則會報錯。

 

 

【形參中默認參數在后,實參中默認參數在后】

 形參中默認參數在前,實參中默認參數在后導致報錯:

 

 

三、可變參數(不定長參數)

我們用一個例子來說明可變參數:

>>>def change(age,*som):
         print(age)
         for i in som:
           print(i)
         return

>>>change('name','year','mon','address')    

 

 

 

【不定長參數】

我們可以看到,在形參中我們定義了兩個參數,為什么實參中輸入了4個參數還是正確的呢?

這就是可變參數帶來的好處!代碼中實參name傳給了形參age,而其余三個傳給了*som,可以說som相當於一個無限大的容器,可以容納很多個參數。

 

 

四、關鍵字參數

 

其實默認參數中已經出現了關鍵字參數!關鍵字參數就是在調用函數時,傳入實參時帶參數名,用這樣的方式傳入的實參叫做關鍵字參數。在這里,我們重點講一下調用函數時傳入關鍵字參數的幾種方法。

 

看一個例子:

定義一個字典:

>>> dir={'name':'miss','age':'18'} >>> def Deaf(school,banji,**other): ... print(學校:',school,'\n',班級:',banji,'\n','學生信息:',other) ... >>> Deaf(清華,'大二',**dir)

 

 

關鍵字參數實例1

上面例子我們可以看出,調用函數時實參除了‘清華’、‘大二’這兩個必須參數外,還有’**dir ’這個關鍵字參數。

我們再看一個例子:

>>> dir={'name':'miss','age':'18'} >>> def Deaf(school,banji,*other): ... print('Xuexiao:',school,'\n','Banji:',banji,'\n','Student_info:',other) ... >>> Deaf('Tsinghua','Class 2',*dir) ('Xuexiao:', 'Tsinghua', '\n', 'Banji:', 'Class 2', '\n', 'Student_info:', ('age', 'name')) >>> 

關鍵字參數實例2

從上面這個例子中我們發現,當形參中有不定長參數 *other,調用函數時用 *dir會發現結果是只有字典中鍵名,沒有值!

我們再看一個例子:

>>> dir={'name':'miss','age':'18'} >>> def Deaf(school,banji,*other): ... print('Xuexiao:',school,'\n','Banji:',banji,'\n','Student_info:',other) ... >>> Deaf('Tsinghua','Class 2',dir) ('Xuexiao:', 'Tsinghua', '\n', 'Banji:', 'Class 2', '\n', 'Student_info:', ({'age': '18', 'name': 'miss'},)) >>> 

 

關鍵字參數實例3

上面這個例子中,形參有不定長參數 *other ,調用函數時用 dir 但其結果是 將字典 以元組的形式輸出,既在字典外面加括號。

 

 

五、組合參數

 

組合參數就是將之前講過的4中參數同時引入函數作為形參,值得注意的是,定義參數時的順序必須為:必須參數、關鍵字參數、默認參數、不定長參數。

 

舉一個例子:

>>> xx={'name':'xiaozhi','age':'18','interesting':'basketball'} >>> tu=(1,2,3,4,5,6) >>> zd={'m':26,'n':25} >>> def hs(a1,a2,a3=10,*a4,**cs): ... print('a1=',a1,'a2=',a2,'a3=',a3,'a4a=',a4,cs) ... >>> hs(1,2,3,4,5,6,7,m=26,n=25,**xx) ('a1=', 1, 'a2=', 2, 'a3=', 3, 'a4a=', (4, 5, 6, 7), {'interesting': 'basketball', 'age': '18', 'm': 26, 'name': 'xiaozhi', 'n': 25}) >>> hs(*tu,**zd) ('a1=', 1, 'a2=', 2, 'a3=', 3, 'a4a=', (4, 5, 6), {'m': 26, 'n': 25}) >>> 

【不定長參數】

在第一次調用函數時,12分別給a1,a2,形參a3=10,但是傳入實參為3,改變了原來的值,因此a3=3

*a4 是不定長參數,因此4567*a4,因此a4a是多個值,以元組的形式輸出,**cs為關鍵字參數,

所以mn以及**xx 的值給**cs,以字典形式輸出。

在第二次調用函數時,tu為一個元組,調用時用*tu方法,因此a1=1a2=2a3=3a4a=(4,5,6);用**zd調用時以字典形式輸出。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM