python三大神器裝飾器 Python 裝飾器

2021-10-19 01:32:02 字數 3469 閱讀 1991

裝飾器:本質是函式,用於裝飾其他函式,為其他函式新增附加功能

原則:1.不能比修改被裝飾的函式的**

2.不能修改被裝飾的函式的呼叫方式

import time

def timmer(func):

def warpper(*args,**kwargs):

start_time=time.time()

func()

stop_time=time.time()

print(start_time,stop_time)

return warpper()

@timmer

def test1():

time.sleep(3)

print('i am test1 !!!!!')

執行結果:

i am test1 !!!!!

1520652510.288641 1520652513.2888126

實現裝飾器知識儲備:

裝飾器=高階函式+巢狀函式

1.函式即「變數」

2.高階函式

a.把乙個函式名當作形參傳給另外乙個函式(在不修改被裝飾函式源**的情況下,為其新增功能)

b.返回值中包含函式名(不修改函式的呼叫方式)

3.巢狀函式

1.函式即"變數"

def foo():

print('in the foo !!!')

bar()

def bar():

print('i am bar !!!')

foo()

執行結果:

in the foo !!!

i am bar !!!

def bar():

print('in the bar !!!')

def test1(func):

print(func)

test1(bar)

執行結果:

def bar():

print('in the bar')

def test1(func):

print(func)

func()

test1(bar)

執行結果:

in the bar

import time

def bar():

print('in the bar !!!')

def test1(func):

start_time=time.time()

func()

stop_time=time.time()

print('in the fun !!!')

print(start_time,stop_time)

test1(bar)

執行結果:

in the bar !!!

in the fun !!!

1520656155.743149 1520656155.743149

import time

def bar():

time.sleep(3)

def test2(func):

print(func)

return func

print (test2(bar))

執行結果:

import time

def bar():

time.sleep(3)

def test2(func):

print(func)

return func

print (test2(bar))

t=test2(bar)

print(t)

執行結果:

import time

def bar():

time.sleep(3)

print('in the bar !!!')

def test2(func):

print(func)

return func

bar=test2(bar)

bar()

執行結果:

in the bar !!!

def foo():

print('in the foo')

def bar():

print('in the bar')

bar()

foo()

執行結果:

in the foo

in the bar

import time

def deco(func):

start_time=time.time()

func()

stop_time=time.time()

def test1():

time.sleep(3)

print('in the test1')

def test2():

time.sleep(3)

print('in the test2')

#deco(test1)

test1=deco(test1)

#deco(test2)

test2=deco(test2)

in the test1

in the test2

import time

def timer(func):

def deco():

start_time=time.time()

func()

stop_time=time.time()

print(start_time,stop_time)

return deco

def test1():

time.sleep(3)

print('in the test1')

def test2():

time.sleep(3)

print('in the test2')

print(timer(test1))

test1() #--->執行deco()函式

執行結果:

.deco at 0x005841e0>

import time

def timer(func):

def deco():

start_time=time.time()

func()

stop_time=time.time()

print(start_time,stop_time)

return deco

@timer # 等同於 test1=timer(test1)

def test1():

time.sleep(3)

print('in the test1')

def test2():

time.sleep(3)

print('in the test2')

test1()

執行結果:

in the test1

1520663936.4761815 1520663939.476353

python三大神器 裝飾器

裝飾器 decorator 能增強now 函式的功能,比如,在函式呼叫前後自動列印日誌,但又不希望修改now 函式的定義,這種在 執行期間動態增加功能的方式,稱之為。本質上,decorator就是乙個返回函式的高階函式。所以,我們要定義乙個能列印購物的decorator,可以定義如下 def inn...

Python三大神器之 裝飾器

def info print 這是學生資訊 info a info print id a print id info a 展示 4009632 4009632 這是學生資訊def info return 小王 defsuccess print 返回值函式 def printinfo func par...

搞定三大神器之 Python 裝飾器

學會 python 裝飾器 裝飾器,幾乎各大python框架中都能看到它的身影,足以表明它的價值!它有動態改變函式或類功能的魔力!本專題的目錄 學會 python 裝飾器 1 什麼是裝飾器 2 裝飾器的結構 3 為什麼要這樣 4 裝飾乙個函式 5 裝飾乙個類 6 裝飾器層疊 7 溫馨提醒 總結1 什...