我們在呼叫函數的時候,主函數和呼叫函數之間總是離不開資料的傳遞,有了資料的傳遞,也就是參數的傳遞。參數的作用是用來傳遞資料給函數使用。
打個比方來說,我們買了一個榨汁機,當我們加入蘋果的時候會出來蘋果汁,加入西瓜的時候會出來西瓜汁,參數就起到這樣一個作用,參數通過主函數傳遞到被呼叫函數,然後被呼叫函數會回傳給我們一個結果。
下面我們來學習參數的傳遞。
要學習函數的參數傳遞,我們首先要了解什麼是形式參數和實際參數。我們繼續拿上面的例子來說,我們在榨汁機中有一個容器來裝水果,我們將水果放在這個容器裡,然後榨汁器開始運轉,形式參數和實際參數也類似這樣的關係。
形式參數為我們定義函數的時候再括號中定義的參數,我們在函數的內部會使用這個參數進行程式碼的編寫,而實際參數為函數呼叫的時候傳進來的參數,函數傳回的結果是根據這個實際參數來代替形式參數。
看下面的例子:
>>>A=30>>>defget_salary(days):...salary=days*300...print(salary)...>>>get_salary(A)9000
在這上面這個例子中,函數在創建的時候使用的參數days為形式參數,在我們呼叫函數的時候,A即為實際參數,實際上要帶入函數中使用的參數。
我們在創建函數的時候可以在括號中定義多個形式參數,我們在呼叫的時候,參數的數量和位置需要和創建的保持一致。
如果我們建立的函數中有2個形式參數,而我們呼叫的時候只使用了1個實際參數,會是什麼樣的結果呢,看下面的例子。
>>>defget_message(address,number):...print(address,number)...>>get_message('蘇州')Traceback(mostrecentcalllast):File<stdin>,line1,in<module>TypeError:get_message ()missing1requiredpositionalargument:'number'
我們可以發現當實際參數的數量不等於形式參數的數量時候,會拋出異常,具體的意思為缺少一個必要位置的參數number。
當參數的位置不一致的時候會導致出現兩種錯誤,一種是直接報錯,因為我們在傳參的時候會根據參數的性質而定義不同的類型,因此資料類型的錯誤會拋出異常。
另外一種錯誤是傳入的參數的資料型態是對的,但是位置是錯的,這樣會出現錯誤的輸出結果。
為了提高程式的可讀性,在函數呼叫的時候還可以使用關鍵字參數來呼叫。
我們透過計算容器的體積來了解關鍵字參數。
>>>defvolume(length,width,height):...volume=length*width*height...print('體積為:',volume)...>>>volume(length=20,width=30 ,height=3)體積為:1800
使用關鍵字參數可以省去定義變數的過程,直接在函數呼叫的時候給參數賦值,然後傳遞到函數當中,最後回傳結果。在這種傳遞方式中,參數位置的差異是不影響輸出結果的。
當我們定義函數的時候,可以為函數的參數定義一個初始值,這樣在我們呼叫函數的時候如果沒有給實際參數,那麼函數就會使用預設參數。
看下面的例子:
>>>defvolume(length=100,width=100,height=10):...volume=length*width*height...print(volume)...>>>volume()#不給出實際參數的時候會使用預設參數100000>>>volume(10,10,10)#給出實際參數會傳遞實際參數給出輸出結果1000
透過上面的例子,如果我們在創建函數的時候已經給出了預設值,那麼我們在使用函數的時候如果不給出實際參數則會自動使用預設參數。
在Python中函數的參數個數是可以變化的,也就是說參數的數量可以是不確定的,這種參數稱為可變參數。可變參數分為兩種,一種是參數前加*,這種方式的可變參數在傳遞的時候是以元組的形式傳遞,一種是參數前加**,這種方式的可變參數在傳遞的時候以字典的形式傳遞,我們主要介紹第一種方式。
看下面的例子:
>>>defadd_number(*number):...add_num=0...foriinnumber:...add_num+=i...print(add_num)...>>add_number(1,2,3,4,5 )15
使用可變參數的時候,這些參數會被存放在一個元組中傳遞到函數裡,因此我們要使用這些參數的時候可以使用遍歷或索引值來使用。
函數的參數傳遞大致上就是這些,想要學好函數,一定要掌握好參數的傳遞,參數的正確傳遞在函數的使用過程中至關重要。