閉包的應用 函式裝飾器decorators

2021-09-29 03:27:34 字數 1411 閱讀 8491

定義:

在不改變原函式的呼叫以及內部**情況下,為其新增新功能的函式.

語法:

def 裝飾器名稱(func):

def 內嵌函式(*args, **kwargs(雙星號字典形參)):

需要新增的新功能

return func(*args, **kwargs)

@ 裝飾器名稱

def 原函式名稱(引數):

函式體原函式(引數)

注:

雙星號字典形參:讓關鍵字實參的數量無限

def

fun05

(**kwargs)

:print

(kwargs)

fun05(a=1)

#fun05(a=

1, b=

2, qtx=3)

#

本質:

使用「@函式裝飾器名稱」修飾原函式,等同於建立與原函式名稱相同的變數,關聯內嵌函式;故呼叫原函式時執行內嵌函式.

原函式名稱 = 函式裝飾器名稱(原函式名稱)

裝飾器鏈:

乙個函式可以被多個裝飾器修飾,執行順序為從近到遠.

裝飾器的應用(**示例):

#不影響舊功能(函式, 例項方法)基礎,增加新功能(統計方法/函式的執行時間).

import time

defcalculate_execute_time

(func)

:def

(*args,

**kwargs)

:# 新功能

start_time = time.time(

) re = func(

*args,

**kwargs)

# 如此可實現呼叫前開始計時,呼叫 後結束計時

stop_time = time.time(

)print

(stop_time - start_time)

return re

@calculate_execute_time

deffun01()

:print

("fun01執行嘍"

)class

myclass

: @calculate_execute_time

deffun02

(self)

:for i in

range

(100):

print

(i)fun01(

)myclass(

).fun02(

)

函式裝飾器和閉包

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

閉包函式和裝飾器

目錄 二 閉包函式的應用 裝飾器閉包 閉是封閉 函式內部巢狀函式 包是包含,閉包是指該內部函式對外部作用域而非全域性作用域的變數的引用。為函式傳參的方式一 使用引數的形式def func x print x func 1 為函式傳參的方式二 包給函式def outter x x 2 def inne...

閉包函式與裝飾器

一 閉包函式 定義在函式內部的函式,並且該函式包含對外部函式作用域中名字的引用,該函式就稱為閉包函式。乙個持有外部環境變數的函式就是閉包,閉包 函式塊 定義函式時的環境。閉包函式是乙個能記住巢狀作用域變數值的函式,儘管作用域已經不存在 工廠函式定義了乙個外部的函式,這個函式簡單的生成並返回乙個內嵌的...