PYTHON高階函式和裝飾器

2021-10-07 03:55:56 字數 2427 閱讀 4828

定義:

裝飾器的本質是函式,用來裝飾其他的函式,為其他的函式新增功能。

函式修飾符:

『@』 用做函式的修飾符,可以在模組或者類的定義層內對函式進行修飾,出現在函式定義的前一行,不允許和函式定義在同一行乙個修飾符就是乙個函式,它將被修飾的函式作為引數,並返回修飾後的同名函式或其他可呼叫的東西

原則:

1、不能修改被裝飾得函式的源**。

2、被修飾的函式呼叫方式不能被修改。

方法:

1.函式即變數

2.高階函式

a.把乙個函式名當做實參傳給另外乙個函式

b.返回值中包含函式名

3.巢狀函式

函式即變數:

x=1; y=2

記憶體中存入1 並賦值給x 存入2並賦值給y

def main():

。。。a code

記憶體中存入a code 賦值給main

main變數名 ()呼叫

高階函式例項a:

函式名傳入

import time

defafuction()

:print

('this is new fuction'

) time.sleep(2)

deftest1

(fuc)

:print

('in the test1'

) fuc(

)#在不改變afuction的情況下對其執行時長進行統計

start_time=time.time(

) stop_time=time.time(

)print

('the func run time is %s'

%(stop_time-start_time)

)

test1(afuction)

高階函式例項b:

覆蓋原函式,實現功能增加

import time

deffuction()

:print

('this is fuction'

) time.sleep(2)

defnwefuction

(fuc)

: fuc(

)print

('this is new fuction'

)return fuc

fuction=nwefuction(fuction)

巢狀函式例項:

import time

deftest1()

: time.sleep(3)

print

('in the test1'

)def

test2()

: time.sleep(2)

print

('in the test2'

)def

deco

(x):

defnewfuction()

: x(

) s_time=time.time(

) p_time=time.time(

)print

('spend %s doing sth'

%(p_time-s_time)

)return newfuction

test1=deco(test1)

test1(

)

最終裝飾器:@

import time

defdeco

(x):

defnewfuction()

: x(

) s_time=time.time(

) p_time=time.time(

)print

('spend %s doing sth'

%(p_time-s_time)

)return newfuction

@deco #test1=deco(test1)

deftest1()

: time.sleep(3)

print

('in the test1'

)@deco #test2=deco(test2)

deftest2()

: time.sleep(2)

print

('in the test2'

)

test1(

)test2(

)

python 高階篇 函式裝飾器和類裝飾器

簡單裝飾器 def my decorator func func def greet print hello world greet my decorator greet greet 輸出 hello world上述 在 python 中有更簡單 更優雅的表示 def my decorator fu...

Python高階函式 裝飾器

由於函式也是乙個物件,而且函式物件可能被賦值給變數,所以,通過變數也能呼叫該函式。def now print 2018 4 11 f now f 2018 4 11 函式物件有乙個 name 屬性,可以拿到函式的名字 now.name now f.name now 現在,假設我們要增強now 函式的...

Python 高階函式 裝飾器

裝飾器 定義裝飾器本身是乙個可呼叫物件,接收乙個函式作為引數,然後將其返回或替換成另乙個函式或可呼叫物件。可以理解成,原來那是一堵白牆,經過了一層裝飾,這層裝飾可能是漆也可能把牆掏空鑲進一層 變得金光閃閃,最後呈現在你眼前的就是裝飾後的樣子。可以把它完全當成常規函式來呼叫,其引數是另乙個函式。裝飾器...