python 學習筆記 day12 裝飾器高階

2022-02-06 23:16:58 字數 1995 閱讀 5438

裝飾器的原則:

開放封閉原則:對擴充套件是開放的,對修改是封閉的;

裝飾器的作用:

在不改變原函式呼叫的情況下,擴充套件被裝飾函式的功能(可以在裝飾器函式內部,在被裝飾函式的前後分別新增相應的功能);

裝飾器函式的本質:

裝飾器函式本質上就是乙個閉包函式;

裝飾器函式固定模式:

裝飾器函式

def inner(*args):

print("

在被裝飾的函式之前新增的功能

") #

1最先被列印

ret=f(*args) #

被裝飾的函式func帶有返回值

print("

在被裝飾的函式之後新增的功能

") #

3 被列印

return

ret

return

inner

def func(a,b,c): #

被裝飾的函式

print(a,b,c) #

2.執行被裝飾的函式時被列印

return

"哈哈哈哈"#

4.最後返回的結果在全域性中被列印

ret=func(1,2,3)

print(ret)

先介紹乙個函式的功能,就是可以以乙個字串的形式返回乙個函式的函式名 func.__name__ ;

可以返回函式的注釋資訊,就是寫在函式內部功能之前 最開始的注釋 func.__doc__;

def

func():

'''我是乙個func函式

'''print('

hello')

print(func.__name__,type(func.__name__)) #

以字串的形式返回函式的名

print(func.__doc__) #

返回乙個函式內部注釋

執行結果:

現在我們來看裝飾器固定模式這個**,有乙個很有意思的事:

裝飾器函式

def inner(*args):

print("

在被裝飾的函式之前執行的**")

ret=f()

print("

在被裝飾的函式之後執行的**")

return

ret

return inner #

deffunc(a,b,c):

print

(a,b,c)

return

"哈哈哈哈

"print(func.__name__)

執行結果:

我們列印func()函式的名字(使用func.__name__ 以字串的形式列印函式名)發現竟然是inner!

我們可以這樣操作:

from functools import

wraps

def @wraps(f)

def inner(*args):

print("

在被裝飾的函式之前執行的**")

ret=f(*args)

print("

在被裝飾的函式之後執行的**")

return

ret

return

inner

deffunc(a,b):

print

(a,b)

return

"哈哈哈哈

"print(func.__name__

)print(func(1,2))

也就是from functools import wraps匯入wraps ,然後在裝飾器函式的內部,inner()閉包函式的上方加上 @wraps(f)即可;

matlab cody學習筆記 day12

input n 5 output a is 3 3 3 3 3 3 2 2 2 3 3 2 1 2 3 3 2 2 2 3 3 3 3 3 3 如何生成乙個靶心矩陣。答 function a bullseye n a ceil sqrt spiral n 2 0.5 spiral n 命令生成n維從...

python學習 day12 模組os sys

內容 以下內容僅供個人學習使用,侵刪 usr bin env python coding utf 8 os 通過程式與作業系統做互動 import os 四個維度 重要的 1.資料夾 建立資料夾 os.mkdir,os.makedirs 刪除資料夾 os.rmdir,os.removedirs 檢視...

前端學習Day12

一 定位 1.position static absolute relative 2.position fixed 固定定位 a 參照物 瀏覽器視窗 b 不佔據空間,脫離布局流 3.讓乙個元素在瀏覽器視窗左右上下居中?第一種方法 前提 已知寬和高 position fixed left 50 top...