python裝飾器,閉包函式

2022-08-27 17:48:11 字數 1967 閱讀 8146

閉包函式:在函式a內部定義另外乙個函式b,之後b作為a的返回值直接被返回。此時函式b稱為a的閉包函式。在閉包函式b中如果使用a函式中定義的變數,此時a函式中被定義的變數會被臨時儲存,直到b函式呼叫結束時該變數才會被系統收回,從而實現a中變數延遲釋放

例如
global:宣告的變數屬於全域性變數,此時在使用該變數時,計算機直接到函式的最外層尋找該變數是否存在

nonlocal:宣告變數屬於非本地變數,此時計算機不會在當前變數使用的函式中尋找該變數,而是到該函式的外層尋找離該函式比較近的對應變數進行宣告

裝飾器:通過@語法直接使用定義好的函式修飾之前已經存在的函式,從而實現對原函式功能的擴充

優點:不需要修改原**,即可實現對原函式功能的擴充;利於後期**的維護

**(裝飾器本質上是乙個python函式,他可以讓其他函式在不需要做任何**變動的前提下增加額外的功能,裝飾器也是乙個函式物件。他經常用於有切面需求的場景,比如:插入日誌、效能測試、事務處理等。裝飾器是解決這類問題的絕佳設計,有了裝飾器,我們就可以抽離出大量與函式功能本身無關的雷同**並繼續重用)

importtime

importfunctools

deflog_time(fun):

@functools.wraps(fun)

defjj(*args1,**kb):

print(time.strftime("%y-%m-%d %h:%m:%s",time.localtime()))

returnfun(*args1,**kb)

returnjj

@log_time #

now = log_time(now)

defnow(*a):

print(a)

now(19,20)

#定義乙個自帶引數的裝飾器

對應時間是:')#

等價於max_num = log('對應時間是:')fun(max_num)

defmax_num(num1,num2):

print(max(num1,num2))

max_num(2,43)

獲取絕對值:print(abs(-4))

列表遍歷:

def callback(num):

num **= 2

return num

list1 = [x for x in range(10)]

result = map(callback,list1)

print(list(result))#map(fun,list):map用來對列表list的遍歷操作,每一次遍歷都會自動呼叫fun函式完成對本次遍歷所得到的元素的計算,當遍歷結束後返回乙個map物件

6.列表過濾:

list2 = [1,3,4,54,5,4,3,35,"sdf","dsf"]

li = filter(lambda x:isinstance(x,int),list2)

print(list(li))#列表過濾:filter(fun,list)用來遍歷列表list,按照給定的過濾條件,完成對滿足條件的資料儲存,不滿足條件的進行過濾(刪除)的操作。其中fun是**函式,充當過濾的條件

7.#偏函式

import functools

int2 = functools.partial(int,base = 2)#將指定的函式和函式中預設值的引數進行繫結,生成乙個新的函式,比如吧int函式和int的預設引數base繫結生成乙個新函式int2,int2此時進行資料轉換時按二進位制進行轉換

result = int2("10101000010100")

print(result)

Python 裝飾器 ,閉包

1 裝飾器 不改變被裝飾的函式情況下附加一些功能 本質是函式,用於裝飾其他函式,附加一些本身所沒有的功能 實質 是乙個函式 引數 是你要裝飾的函式名 並非函式呼叫 返回 是裝飾完的函式名 也非函式呼叫 作用 為已經存在的物件新增額外的功能 特點 不需要對物件做任何的 上的變動 例1 計算執行時長 i...

python基礎 閉包函式和裝飾器

首先我們應該知道一件事 函式的定義域跟定義位置有關係,而跟呼叫位置沒有關係。閉包函式 定義 內層函式對外層函式而非全域性變數的引用,就叫做閉包函式 閉包會一直存在在記憶體中,不會因為函式執行結束而被釋放 先看個例子 def outer num 1 definner nonlocal num num ...

函式裝飾器和閉包

裝飾器是可呼叫的物件,其引數是另乙個函式 被裝飾的函式 裝飾器可能會處理被裝飾的函式,然後把它返回,或者將其替換成另乙個函式或可呼叫物件。裝飾器通常把函式替換成另乙個函式 defdeco func definner print running inner return inner deco def ...