「小白福利,快速入門Python」之函式應用

歡迎大家關注公眾號【雜湊大資料】

函式定義

python

函式標準的定義是

:為了最大程度的重用程式碼和最小化程式碼冗餘而提供的基本程式結構;以便將複雜的程式系統分解為可管理的若干部分。

在python中定義函式,藉助關鍵字def進行定義,自定義一個函式名稱。並且指定函式所需的相關引數,最終在函式體中,完成特定的一個功能。同時也可以定義該函式的返回值,供其他功能模組使用,如果不定義函式返回值,則預設返回None。帶有返回值的函式的基本結構如下:def function_name(parameter):

function_content

return something

(or) pass

在下面求和的函式例項中,分別定義了返回值和沒有返回值的。

「小白福利,快速入門Python」之函式應用

「小白福利,快速入門Python」之函式應用

對於我們之前實現的求一個數絕對值的函式體(在呼叫過程中即可直接獲得絕對值結果),計算九九乘法表的函式等,也都是較為標準的python函式的實現。透過python的語法格式縮排表示函式頭和函式體的關係,在函式頭中不能缺少。

在實際編寫一個函式時,若未完全設計好函式的功能, 可以優先利用pass語句做佔位符,保證函式語義的完整性,以便之後再完善補充函式功能。全

全域性變數區域性變數

python程式中的變數按照作用域分,可以分為全域性變數和區域性變數,如果一個程式中的變數定義在函式體中,則該變數為區域性變數,如果定於在主程式中,則為全域性變數,一般而言區域性變數的優先順序高於全域性變數的優先順序,區域性變數的值會覆蓋全域性變數的值。因此在編寫程式過程中,儘量使用區域性變數而不汙染其他函式中的變數。

如果在函式中想給全域性變數賦值,需要用關鍵字global對變數進行宣告。下面例項中在函式體中使用global對a變數進行重新賦值後,a變數在全域性範圍將進行更新,否則a變數的值將保持不變,如我們想將a變數的值進行還原,不用global關鍵字,則不會改變a變數的值。

「小白福利,快速入門Python」之函式應用

函式的引數&呼叫

上述例項中的求和函式未指定函式引數,但是一般情況下,設定函式引數可以更好的實現函式功能。引數的確定是在函式名之後的()中進行,在python函式中引數分為五大類,設定函式引數是至關重要的一步。定義好一個函式後,直接使用函式名+引數即可完成對某一個函式的呼叫。依次來看每類引數的定義和呼叫方式。

引數型別及呼叫例項:

(1)位置引數:一般函式預設透過位置傳遞引數,從左到右對於位置引數在呼叫時必須進行指定,不然會報錯

「小白福利,快速入門Python」之函式應用

(2)預設引數:預設引數的值必須是不可變的物件,對於多個引數而言這樣不僅可以降低呼叫的複雜度,而且可以接受呼叫過程中更新變化的值。預設引數顧名思義若不指定則直接使用預設的值,指定的話,可以按照位置引數指定方法,依次按順序提供每個預設引數的值;還可以按照引數名稱直接指定,而不用考慮引數的前後位置。

「小白福利,快速入門Python」之函式應用

如果在定義引數中使用了可變的物件pycharm會進行較為人性化的提醒,雖然強制定義也是可行的,但是可能影響到之後程式的功能,如下面例子可知預設引數的值是不斷變化的,因此儘可能按照要求使用不可變物件。

「小白福利,快速入門Python」之函式應用

「小白福利,快速入門Python」之函式應用

請點選輸入圖片

(3)可變引數:使用*進行標註,接受任何可變數量引數,在呼叫時,可以直接給定任意個數的符合要求的引數。這些引數最終會以元組形式呈現。

「小白福利,快速入門Python」之函式應用

(4)命名關鍵字引數:只用於接收指定關鍵字的引數值,*表示間隔符。之後的引數就是命名關鍵字引數,可以有預設值,或者只有關鍵字。在呼叫時沒有預設值的引數都必須指定,而且命名關鍵字必須同時傳入關鍵字和引數值。

「小白福利,快速入門Python」之函式應用

(5)關鍵字引數:接受任意關鍵字的引數值,使用**表示關鍵字引數。在呼叫時可以傳入0-多個關鍵字=引數值(必須一起)形式的引數,或者是**在這之後直接加字典或者Json格式的陣列。最終這些引數以字典格式呈現。

「小白福利,快速入門Python」之函式應用

這些不同的引數型別可以混合使用,但是混合使用的時候要注意不同引數的順序必須是:位置引數(必選引數)、預設引數、可變引數/命名關鍵字引數以及關鍵字引數。

匿名 函式

對於功能較為簡單的函式,可以使用匿名函式替代標準的函式的定義,從而簡化函式的應用。在python中透過關鍵字lambda來建立匿名函式,無需指定函式名,函式體是表示式而非程式碼塊,而且只能使用自己名稱空間中的引數值,而不能使用全域性變數中的引數值。具體結構如下:(:之前為引數,之後為函式體表達式)

lambda [arg1 [,arg2,。。。。。argn]]:expression

匿名函式是一個函式物件返回值是匿名函式表示式結果,如果將匿名函式賦值給一個變數則該變數相當於函式名,透過呼叫該變數和相關引數即可實現標準函式的功能。來看下面兩個等價的例項:

「小白福利,快速入門Python」之函式應用

其他 函式

遞迴函式:在函式體中呼叫函式本身。在之前的介紹中,我們有實現過一個透過遞迴方式進行階乘的計算。直至函式中所傳入的引數為1時,停止遞迴呼叫。任何遞迴函式都是可以使用迴圈實現的。

import sys

def Factorial(num):

if num == 1 :

return 1

else:

result = num * Factorial(num-1)

return result

if __name__ == ‘__main__’ :)

result = Factorial(5)

print(‘5的階乘是:{}’。format(result))

高階函式:返回值也是一個函式。具體使用在之後會詳細介紹。

「小白福利,快速入門Python」之函式應用