python 函式高階 python 函式的高階

2021-10-13 05:58:51 字數 1360 閱讀 9185

一、遞迴函式

乙個函式自己呼叫自己就是遞迴呼叫。

這樣會陷入死迴圈,跟while和for的死迴圈不同的是,遞迴呼叫的函式只能迴圈999次,然後就報錯了。

遞迴呼叫的特性:

1、必須有乙個明確的結束條件

2、遞迴呼叫效率不高,每次進入更深一次的遞迴時,問題規模要比上次遞迴有所減少

二、高階函式

1、如果乙個函式a作為引數傳入另乙個函式b,那麼b就為高階函式。

2、函式名變數

hello是變數名,存的是hello這個函式的位址,new_hello = hello,那麼new_hello儲存的內容和hello的相同,都是print(name)這個函式體。

所以呼叫new_hello(),和呼叫hello(),是一樣的。

下圖為高階函式的用法(引數z是乙個函式名):

三、巢狀函式

1、定義就是函式裡面定義另乙個函式

2、函式的作用域

之前講了全域性變數和區域性變數,全域性變數可以在任何地方使用,區域性變數只能在內部使用。

函式的作用域是就近原則,當前函式找不到變數就去上一層集去找,找不到再去上一層集,從裡往外找直到找到為止。但是上一層集的變數不能在裡面的函式去找。

執行結果:

這裡列印的順序和取值的內容是因為:

首先,呼叫warpper,函式體力定義了deco()和hhh()兩個函式,定義後,先是呼叫了hhh()函式,但是因為hhh()在deco()裡面,deco()不執行所以hhh()呼叫也不能執行;

接著,呼叫deco()函式,那麼開始執行deco函式,列印出「***kevin」和「我在裡面susan」,deco執行完畢,最後列印出「我是candy」。

四、裝飾器

裝飾器說白了就是函式巢狀+高階函式,它的作用是不改變原來函式的呼叫方式,不用修改**就可以給乙個函式新增乙個功能。比如想要計算乙個方法執行了多長時間,需要在程式執行前獲取乙個時間,執行結束再獲取乙個時間,然後求時間差。但是這種方法比較麻煩,乙個方法可以,多了就很麻煩了。

下面是用裝飾器來寫,函式名bar作為乙個引數傳進test1函式,呼叫test1(bar),計算bar()執行了多長時間。但是這樣寫,改變了函式的呼叫方式。也不是我們最終想要的裝飾器。

下面這個是裝飾器的最終版本。和上面不同的是,「@timer」的作用相當於「bar = timmer(bar)」,當呼叫bar()時,也就是呼叫timmer(bar),timmer方法中,定義了乙個deco()函式,定義之後返回deco這個函式名。也就是說,呼叫timmer(bar),最終的結果是返回deco這個函式名,我們說函式名即變數,存的是函式體在記憶體的位址,那bar = deco,bar裡面的記憶體位址發生變化,它的函式體變成了deco()函式的函式體,此時呼叫bar(),就是執行deco(),從而達到計算bar()執行的時間。

python 函式高階 python 函式高階

形參角度 萬能引數 動態接收位置引數 args 動態接收關鍵字引數 kwargs 的魔性用法 函式定義時 代表聚合。他將所有的位置引數 聚合成乙個元組,賦值給了args 函式定義時 將所有的關鍵字引數聚合成乙個字典中,將這個字典賦給了 kwargs 和 在函式的呼叫時 代表打散 僅限關鍵字引數 de...

python是高階動態程式語言 Python語言

python是一門跨平台 開源 免費的解釋型高階動態程式語言。python支援命令式程式設計 how to do 函式式程式設計 what to do 完全支援物件導向程式設計,擁有大量擴充套件庫。膠水語言 可以把多種不同語言編寫的程式融合到一起實現無縫拼接,更好地發揮不同語言和工具的優勢,滿足不同...

Python高階 函式高階

閉包 closure 常規函式中可以在函式的引數中新增引數的預設值來簡化函式的操作,偏函式也可以做到這一點,而且會更加的方便管理函式的操作。通過內建模組functools的partial進行定義和處理 語法結構 新函式名稱 functools.partial 函式名稱,預設賦值引數 例如 全域性函式...