Python編程:輕松掌握函數定義、類型及其參數傳遞方式
前言
本文帶你輕松理解并掌握Python語言中的核心特性——函數:定義語法以及函數形式,并介紹函數的參數傳遞的兩種方式。
函數含義
函數(function)是執行特定任務的語句塊,是允許程序員重用的部分代碼,其促進了軟件程序的模塊化概念。這種方法背后的主要思想是將一個大的代碼塊劃分為更小的獨立部分,也因此更易于管理的子塊。Python中有兩種類型的函數:
內置函數(Build-in):編程時可以在程序中直接使用這些函數而無需定義它們。這種類型的函數在一開的始學習中經常使用了(例如,print()、input()、sum()等)。
用戶定義函數(User-defined):Python允許程序員創建自己的函數。接下來將重點介紹這種特定的函數類型。
簡而言之,函數就是定義好的且可以重復調用的結構化語句塊。函數名稱唯一,可接收參數,并且根據需要返回給調用者相應的結果(值),或不返回值。
函數定義
在Python中定義函數的主要規則如下:
- 函數塊以關鍵字def開始,后面跟著函數名和括號。注意,由于Python是區分大小寫的,所以必須使用def而不是Def。
- 與變量名類似,函數名可以包含字母或數字,但不包含空格或特殊字符,且不能以數字開頭。
- 可選的輸入參數(稱為arguments)應放在括號內——參數數量和類型根據需要來。
- 函數名后跟冒號,通常函數中的語句塊從冒號后換行開始并縮進。
- 返回數據的函數必須在其代碼塊中包含關鍵字return。
概括起來,有四種類型的函數:
- 無參數無返回值型函數;
- 有參數無返回值型函數;
- 無參數有返回值型函數;
- 有參數有返回值型函數。
函數定義的語法格式如下:
根據實參的存在與否以及輸入和/或返回值的存在情況,函數可以分為上面的四種可能的類型。下面將分別介紹。
無參無返回值型函數
在這種類型中,函數不接受變量作為參數,也不返回任何數據。比如下面的腳本演示即為這種函數,它只在屏幕上打印預定義的字符串。
代碼顯而易見,定義中形參,調用時沒有實參,語句塊中也沒有return語句。該結構只是調用print()函數來顯示所需的消息。在主程序中調用這樣一個函數是一個相當簡單直接,如下所示:
運行程序后輸出結果為:
有參無返回值型函數
另一種類型的函數接受變量作為參數,但不返回任何數據。在下面的示例中,通過聲明的名稱來調用函數,同時在所調用的函數括號中包含一些值。這些值被傳遞給函數的主體使用,可以被視為普通變量:
運行程序,結果類似如下:
無參有返回值型函數
第三種類型為不接受參數但有返回數據的函數。重要的是要記住,因為這種類型的函數返回的一個值給調用代碼,這個值必須在被使用或處理之前賦值給一個變量。示例如下:
運行程序結果類似如下:
有參有返回值型函數
這種類型函數既接受參數,又將值返回給調用代碼。情況下面示例。在這種情況下,函數的調用必須包含一個參數列表,并將返回值賦給一個特定的變量以供以后使用:
運行程序結果類似如下:
函數參數傳遞方式
有兩種不同的方法用來給函數傳遞參數。確定選擇兩者的哪個方法應取決于原來變量的值是否可在函數內更改。將參數值傳遞給函數有兩種方法,通常被稱為按值調用/傳遞(call/pass by value)和按引用調用/傳遞(call/pass by reference)。
概要來說,函數參數傳遞:
其一,按值方式:參數是原始變量的副本,保持副本且不改變原始值;
其二,按引用方式:改變直接作用于原始變量,因此也就改變了原始值。
按值調用/傳遞
在這種情況下,實參(形參)的值作為原始變量的副本處理。因此,當程序控制返回給調用者時,調用者作用域中的原始變量將保持不變。
在Python中,如果將不可變參數(例如,整數和字符串)傳遞給函數,通常的做法是按值調用/傳遞參數。下面的示例通過介紹id()函數說明了這種情況。它接受一個對象作為參數(即id(object)),并返回這個特定對象的標識。Id()返回值是一個整數,它在對象的生命周期內是惟一的和永久的。如示例所示,在調用checkParamemterID函數之前,變量x的id為4564813232。需要注意的是,只要x的值沒有更新,x的id在函數中就不會改變。但是,一旦該值更新為20,其對應的id將更改為4564813552。需要注意的最重要的一點是,x的id在調用函數后不會改變,它的原始值保持不變(4564813232)。這意味著對x值的更改應用于變量的副本,而不是調用者作用域內的原始變量。
示例代碼如下:
運行輸出結果類似如下:
按引用調用/傳遞
在這種情況下,函數獲取實參(即原始變量)的引用,而不是它的副本。如果函數內發生更改,則調用者作用域中原始變量的值也將被修改。在Python中,如果可變參數(如列表)傳遞給函數,則調用/傳遞是通過引用進行的。如下所示,updateList將值5追加到名為y的列表中。即原始可變變量x的值發生了變化,這證明函數按引用調用/傳遞參數的特征。示例代碼如下:
運行程序輸出結果類似如下:
本文小結
本期內容介紹了函數的基本內容和實現語法,以及參數傳遞、有無參數和返回值的函數形式以及函數調用/傳遞的實現。