Python之裝飾器

2021-08-18 23:14:57 字數 1758 閱讀 9591

python裝飾器

裝飾器到底是什麼?簡言之,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的**前提下給函式增加新的功能。

先來看乙個例子:

#!/usr/bin/env python

# -*- coding:utf8 -*-

# @time     : 2018/4/18 10:50

# @author   : hantong

# @file     : 20180418_1.py

def start(func):

print("************start*************")

func()

print("************end***************")

return func

@start

def myfunc():

print("****myfunc****")

myfunc()

執行結果:

************start*************

****myfunc****

************end***************

****myfunc****

上例中是最簡單的裝飾器的例子,我使用語法糖@來裝飾函式,那麼如果我在**結尾再加上乙個myfunc(),其結果也只是列印myfunc()函式自己的部分,不會再次呼叫start函式的部分,實際上這裡@start相當於myfunc=start(myfunc),記住這一句非常關鍵。在這裡需要在解釋一下的是,上面那個函式是裝飾函式,下面是被裝飾的函式,所以執行結果會先把裝飾函式的結果列印出來,再來列印被裝飾函式的執行結果,並且這個裝飾器可以被多個函式呼叫,就是說加入下面再定義乙個函式,還可以通過@start再呼叫這個裝飾器。

上例中只能呼叫一次裝飾器,那麼如果我們想多次呼叫裝飾器呢,請看下例:

#!/usr/bin/env python

# -*- coding:utf8 -*-

# @time     : 2018/4/18 13:56

# @author   : hantong

# @file     : 20180418_2.py

def start(func):

def hello():

print("************start*************")

func()

print("************end***************")

return hello

@start

def myfunc():

print("****myfunc****")

return 'ok'

myfunc()

myfunc()

執行結果:

************start*************

****myfunc****

************end***************

************start*************

****myfunc****

************end***************

從執行結果可以看出,裝飾器中的函式被執行了兩次。**部分請注意裝飾器中有個內嵌函式,正是這個內嵌函式才避免了我們不用手動再執行一次就可以得到執行兩次的效果

未完待續。。。。。。。。。

myfunc()

python裝飾器介紹 Python之裝飾器簡介

python函式式程式設計之裝飾器 1.開放封閉原則 簡單來說,就是對擴充套件開放,對修改封閉。在物件導向的程式設計方式中,經常會定義各種函式。乙個函式的使用分為定義階段和使用階段,乙個函式定義完成以後,可能會在很多位置被呼叫。這意味著如果函式的定義階段 被修改,受到影響的地方就會有很多,此時很容易...

python 找到裝飾器 Python之裝飾器

裝飾器本質上就是乙個python函式,他可以讓其他函式在不需要做任何 變動的前提下,增加額外的功能,裝飾器的返回值也是乙個函式物件。裝飾器的作用 在不改變原函式及原函式的執行的情況下,為原函式增加一些額外的功能,比如列印日誌 執行時間,登入認證等等。乙個簡單的裝飾器 import time def ...

Python之裝飾器

裝飾器就是乙個以函式作為引數並返回乙個替換函式的可執行函式 即裝飾器是乙個函式,其引數為函式,返回值也為函式 可理解為對函式的功能進行拓展,所以叫裝飾 outer為裝飾器,效果為給被裝飾函式返回值結果加負號 defouter fun definner x return fun x return in...