python 裝飾器的使用

2021-09-25 06:59:56 字數 1941 閱讀 5255

使用裝飾器將函式作為引數,最後再返回乙個引數,簡單來說就是在不修改原函式的**上對原函式新增新的功能。

(1)在原函式中新增乙個裝飾器

原函式:

def sayhello():

print("hello,world")

sayhello()

新增裝飾器後:

import functools

def decorator(fun): #fun為呼叫的函式

@functools.wraps(fun)

print("hello,python") #新增的功能

1、@decorator相當於sayhello = decorator(sayhello)

2、*args,**kwargs   表示可以接受任意的引數

3、@functools.wraps(fun) 儲存原函式的屬性,如name,model等

(2)在原函式中新增多個裝飾器

import functools

def decorator(fun): #fun為呼叫的函式

@functools.wraps(fun)

print("hello,python") #新增的功能

fun(*args,**kwargs)

def decorator1(fun):

@functools.wraps(fun)

print("i lov study")

fun(*args,**kwargs)

@decorator1

@decorator

def sayhello():

print("hello,world")

sayhello()

呼叫方式:

(3)裝飾器傳入引數

import functools

def getnum(num):

def decorator(fun): #fun為呼叫的函式

@functools.wraps(fun)

print("hello,python") #新增的功能

print("getnum %d"%(int(num)))

fun(*args,**kwargs)

return decorator

@getnum('10') #傳入引數

注:只需再填寫乙個高階函式返回decorator即可

python裝飾器的使用

在class內部,可以有屬性和方法,而外部 可以通過直接呼叫例項變數的方法來運算元據,這樣,就隱藏了內部的複雜邏輯。但是,從前面student類的定義來看,外部 還是可以自由地修改乙個例項的name score屬性 如果要讓內部屬性不被外部訪問,可以把屬性的名稱前加上兩個下劃線 在python中,例...

Python裝飾器的使用

本文介紹的是python裝飾器 的使用,分三部分記錄裝飾器,旨在為之後複習保留學習筆記。python裝飾器在沒有改變原始函式呼叫方式的同時,在原始函式的前後增加功能,滿足開放封閉原則。目錄 1.裝飾器的固定模板 2.帶引數的裝飾器模板 3.多個裝飾器函式裝飾乙個函式 裝飾器的固定模板 def inn...

python裝飾器的使用

它可以使我們的 看起來更簡潔,可以修改部分函式功能,讓你的 看起來很 高階 當然,它也可能會造成 的閱讀性變差,所以在使用裝飾器的時候,你需要做乙個取捨。首先來看一段 def param func return hi,im a function def decoration function pri...