裝飾器
1、裝飾器函式的本質:乙個閉包函式
2、裝飾器函式的作用: 在不修改原函式及其呼叫方式的情況下對原函式功能進行擴充套件
3、語法糖 格式:@裝飾器名稱
4、建立帶返回值的裝飾器
5、建立傳遞引數的裝飾器
6、裝飾器的固定格式
def
(f):
definner
(*args,
**kwargs)
: ret=f(
*args,
**kwargs)
return ret
return inner
deffun
(*args,
**kwargs)
:print
("zzz"
)
7、解決被裝飾函式不能檢視資訊bug 匯入wraps from functools import wraps @wraps(func)
練習:
import time
deftimer
(func)
:def
inner()
: start=time.time(
) time.sleep(
0.1)
ret=func(
) end=time.time(
)print
("程式執行的時間{}"
.format
(start-end)
)return ret
return inner
@timer
deffun()
:print
("華晨宇演唱會"
)return
"你去了沒"
ret=fun(
)print
(ret)
結果:
華晨宇演唱會
程式執行的時間-
0.1094198226928711
你去了沒
@property裝飾器
1、@property 內建裝飾器函式,把乙個方法呼叫方式變成屬性呼叫方式。(將一 個方法當成乙個屬性使用)。注意@property裝飾器只能在物件導向中使用。
2、訪問使用@property裝飾器裝飾的函式可以直接呼叫函式名 (會執行一段功能(函式)然後返回值)
3、@property 裝飾器只能修飾不帶引數的方法。
4、@property裝飾器修飾私有方法的getter和setter方法。和控制屬性的訪問權 限唯讀。
練習:
class
person
:def
__init__
(self,name,age)
: self.__name=name
self.__age=age
@property
defname
(self)
:return self.__name
@property
defage
(self)
:return self.__age
@age.setter
defage(self,age)
:return self.__age
@age.setter
defage(self,age)
:if age<=
0or age>
150:
print
("火星來的吧"
)return
else
: self.__age=age
person=person(
"zs",17
)person.age=
31print
(person.age)
結果:
31
練習2:
bmi指數計算 **的bmi數值: 過輕:低於18.5
正常:18.523.9 過重:2427 肥胖:2832 非常肥胖, 高於32 體質指數(bmi)=體重(kg)÷身高^2(m) ex:70kg÷(1.75×1.75)=22.86
class
person
:def
__init__
(self,name,weight,height)
: self.name=name
self.weight=weight
self.height=height
@property
defbmi
(self)
:return self.weight/
(self.height**2)
@bmi.setter
defbmi(self,bmi)
:if bmi>
18.5
and bmi<
23.9
:print
("正常"
)else
: bmi=
"18.5---23.9"
print
("不正常,bmi應該在{}"
.format
(bmi)
)people=person(
"as",80
,1.65
)people.bmi=
40print
(people.bmi)
結果:
不正常,bmi應該在18.5--
-23.9
29.384756657483933
python裝飾器 Python 裝飾器
簡言之,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。一般而言,我們要想拓展原來函式 最直接的辦法就是侵入 裡面修改,例如 這是我們最原始的的乙個函式,然後我們試圖記錄...
python裝飾器 裝飾器
由於函式也是乙個物件,而且函式物件可以被賦值給變數,所以,通過變數也能呼叫該函式。def now print 2015 3 25 f now f 2015 3 25 函式物件有乙個 name 屬性,可以拿到函式的名字 now.name now f.name now 現在,假設我們要增強now 函式的...
python裝飾器原理 Python裝飾器原理
裝飾器 decorator 是物件導向設計模式的一種,這種模式的核心思想是在不改變原來核心業務邏輯 的情況下,對函式或類物件進行額外的修飾。python中的裝飾器由python直譯器直接支援,其定義形式如下 decorator def core service 要理解上述 的含義,我們從自定義函式裝...