Python 裝飾器函式

2022-08-14 04:36:09 字數 3333 閱讀 1491

兩天的內容:(裝飾器)

#

裝飾器-簡單版

import

time

deffunc1():

print('

in func1')

deftimer(func):

definner():

start =time.time()

func()

print(time.time() -start)

return

inner

func1 =timer(func1)

func1()

#

裝飾器-語法糖

import

time

deftimer(func):

definner():

start =time.time()

func()

print(time.time() -start)

return

inner

@timer

#==>func1 = timer(func1)

deffunc1():

print('

in func1')

func1()

對於使用者來說,感知不到裝飾器的存在  在乙個函式的前後新增功能

裝飾器的本質:乙個閉包函式

裝飾器的功能:在不修改原函式及其呼叫的情況下對原函式功能進行擴充套件

#

帶引數的裝飾器

import

time

deftimer(func):

definner(a):

start =time.time()

func(a)

print(time.time() -start)

return

inner

@timer

deffunc1(a):

print

(a)func1(1)

#

裝飾器-可以hold住所有函式傳參

import

time

deftimmer(func):

def inner(*args,**kwargs):

start =time.time()

re = func(*args,**kwargs)

print(time.time() -start)

return

re

return

inner

@timmer

deffunc1(a,b):

print('

in func1')

@timmer

deffunc2(a):

print('

in func2 and get a:%s

'%a)

return

'func2 over

'func1(

'asasas

','bffbfbf')

print(func2('

asasas

'))

import

time

deftimer(func):

def inner(*args,**kwargs):

start =time.time()

re = func(*args,**kwargs)

print(time.time() -start)

return

re

return

inner

@timer

deffunc2(a):

print('

in func2 and get a:%s

'%(a))

return

'func2 over

'func2(

'aaaa

','bbbb')

print(func2('

aaaa

'))

開放封閉原則

1.對擴充套件是開放的

為什麼要對擴充套件開放呢?

任何乙個程式,不可能是在設計之初就已經想好了所有的功能並且未來不做任何更新和修改。

所以我們必須允許**擴充套件、新增新功能

2.對修改是封閉的

為什麼要對修改封閉呢?

我們寫的乙個函式,很可能已經交付給其他人使用,如果這個時候我們對其進行了修改,很有

可能影響其他已經使用該函式的使用者。

裝飾器完美的遵循了這個開放封閉原則

裝飾器的主要功能:

在不改變函式呼叫方式的基礎上在函式的前、後新增功能

#

裝飾器的固定格式:

deftimer(func):

def inner(*args,**kwargs):

'''執行函式之前要做的

'''re= func(*args,**kwargs)

'''執行函式之後要做的

'''return

re

return inner

#

帶引數的裝飾器

defouter(flag):

deftimer(func):

def inner(*args,**kwargs):

ifflag:

print('''

執行函式之前要做的

''')

re = func(*args,**kwargs)

ifflag:

print('''

執行函式之後要做的

''')

return

re

return

inner

return

timer

@outer(false)

deffunc():

print(111)

func()

#

多個裝飾器同乙個函式

def

definner():

print('')

func()

print('')

return

inner

def

definner():

print('')

func()

print('')

return

inner

deff():

print('

in f')

f()

python裝飾器 函式裝飾器,類裝飾器

只要實現此 模式,這個obj就叫乙個裝飾器 參考 函式裝飾器 例子 def decorator func def inner args,kwargs print before.res func args,kwargs print after.return res return inner decor...

python 裝飾器 函式裝飾器 類裝飾器

python函式裝飾器和類裝飾器筆記.usr bin env python coding utf 8 author ivan file decorators.py version from functools import wraps 裝飾器 目的是為了給函式新增附加功能 1.不帶引數裝飾器 此方式...

python裝飾器 裝飾器工廠函式

使用裝飾器實現如下所示的列印 小白聯盟def printequel func1 def inner1 print 15 func1 return inner1 def printstar func2 def inner2 print 15 func2 return inner2 printequel...