我們在調(diào)用函數(shù)的時候,主函數(shù)和調(diào)用函數(shù)之間總是離不開數(shù)據(jù)的傳遞,有了數(shù)據(jù)的傳遞,也就是參數(shù)的傳遞。參數(shù)的作用是用來傳遞數(shù)據(jù)給函數(shù)使用。
打個比方來說,我們買來了一個榨汁機,當我們加入蘋果的時候會出來蘋果汁,加入西瓜的時候會出來西瓜汁,參數(shù)就起到這樣一個作用,參數(shù)通過主函數(shù)傳遞到被調(diào)用函數(shù),然后被調(diào)用函數(shù)會返回給我們一個結(jié)果。
下面我們來學(xué)習(xí)參數(shù)的傳遞。
1. 形式參數(shù)和實際參數(shù)
要學(xué)習(xí)函數(shù)的參數(shù)傳遞,我們首先要了解什么是形式參數(shù)和實際參數(shù)。我們繼續(xù)拿上面的例子來說,我們在榨汁機中有一個容器來裝水果,我們將水果放在這個容器里,然后榨汁器開始運轉(zhuǎn),形式參數(shù)和實際參數(shù)也類似這樣的關(guān)系。
形式參數(shù)為我們定義函數(shù)的時候再括號中定義的參數(shù),我們在函數(shù)的內(nèi)部會使用這個參數(shù)進行代碼的編寫,而實際參數(shù)為函數(shù)調(diào)用的時候傳進來的參數(shù),函數(shù)返回的結(jié)果是根據(jù)這個實際參數(shù)來代替形式參數(shù)。
看下面的例子:
>>> A = 30 >>> def get_salary(days): ... salary = days * 300 ... print(salary) ... >>> get_salary(A) 9000
在這上面這個例子中,函數(shù)在創(chuàng)建的時候使用的參數(shù)days為形式參數(shù),在我們調(diào)用函數(shù)的時候,A即為實際參數(shù),實際要帶入到函數(shù)中使用的參數(shù)。
2. 位置參數(shù)
我們在創(chuàng)建函數(shù)的時候可以在括號中定義多個形式參數(shù),我們在調(diào)用的時候,參數(shù)的數(shù)量和位置需要和創(chuàng)建的保持一致。
1) 參數(shù)的數(shù)量不一致
如果我們創(chuàng)建的函數(shù)中有2個形式參數(shù),而我們調(diào)用的時候只使用了1個實際參數(shù),會是什么樣的結(jié)果呢,看下面的例子。
>>> def get_message(address,number): ... print(address,number) ... >>> get_message('蘇州') Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: get_message() missing 1 required positional argument: 'number'
我們可以發(fā)現(xiàn)當實際參數(shù)的數(shù)量不等于形式參數(shù)的數(shù)量時候,會拋出異常,具體的意思為缺少一個必要位置的參數(shù)number。
2) 參數(shù)的位置不一致
當參數(shù)的位置不一致的時候會導(dǎo)致出現(xiàn)兩種錯誤,一種是直接報錯,因為我們在傳參的時候會根據(jù)參數(shù)的性質(zhì)而定義不同的類型,因此數(shù)據(jù)類型的錯誤會拋出異常。
另外一種錯誤是傳入的參數(shù)的數(shù)據(jù)類型是對的,但是位置是錯的,這樣會出現(xiàn)錯誤的輸出結(jié)果。
3. 關(guān)鍵字參數(shù)
為了提高程序的可讀性,在函數(shù)調(diào)用的時候還可以使用關(guān)鍵字參數(shù)調(diào)用。
我們通過計算容器的體積來了解關(guān)鍵字參數(shù)。
>>> def volume(length,width,height): ... volume = length * width * height ... print('體積為:',volume) ... >>> volume(length=20,width=30,height=3) 體積為: 1800
使用關(guān)鍵字參數(shù)可以省去定義變量的過程,直接在函數(shù)調(diào)用的時候給參數(shù)進行賦值,然后傳遞到函數(shù)當中,最后返回結(jié)果。在這種傳遞方式中,參數(shù)位置的不同是不影響輸出結(jié)果的。
4. 參數(shù)默認值
當我們定義一個函數(shù)的時候,可以給函數(shù)的參數(shù)定義一個初始值,這樣在我們調(diào)用函數(shù)的時候如果沒有給出實際參數(shù),那么函數(shù)會使用默認參數(shù)。
看下面的例子:
>>> def volume(length=100,width=100,height=10): ... volume = length * width * height ... print(volume) ... >>> volume()#不給出實際參數(shù)的時候會使用默認參數(shù)100000 >>> volume(10,10,10)#給出實際參數(shù)會傳遞實際參數(shù)給出輸出結(jié)果 1000
通過上面的例子,如果我們在創(chuàng)建函數(shù)的時候已經(jīng)給出了默認值,那么我們在使用函數(shù)的時候如果不給出實際參數(shù)則會自動使用默認參數(shù)。
5. 可變參數(shù)
在Python中函數(shù)的參數(shù)個數(shù)是可以變化的,也就是說參數(shù)的數(shù)量可以是不確定的,這種參數(shù)被稱為可變參數(shù)。可變參數(shù)分為兩種,一種是參數(shù)前加*,這種方式的可變參數(shù)在傳遞的時候是以元組的形式傳遞,一種是參數(shù)前加**,這種方式的可變參數(shù)在傳遞的時候以字典的形式傳遞,我們主要介紹一下第一種方式。
看下面的例子:
>>> def add_number(*number): ... add_num = 0 ... for i in number: ... add_num += i ... print(add_num) ... >>> add_number(1,2,3,4,5) 15
使用可變參數(shù)的時候,這些參數(shù)會被存放在一個元組中傳遞到函數(shù)里,因此我們要使用這些參數(shù)的時候可以使用遍歷或者索引值進行使用。
函數(shù)的參數(shù)傳遞大致就是這些,想要學(xué)好函數(shù),一定要掌握好參數(shù)的傳遞,參數(shù)的正確傳遞在函數(shù)的使用過程中至關(guān)重要。
1037 | [編程入門]宏定義的練習(xí) |
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:
一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍橋杯輔導(dǎo)課程