# Python初步瞭解裝飾器 - 裝飾器的概念 - 裝飾器的簡單使用 - 裝飾器的進階 - 裝飾器的練習 - 裝飾器的固定模塊 - 裝飾器的語法糖 ## 裝飾器的概念 ```python 裝飾器它不是一個新的知識點,它是有之前我們學習的名稱空間、函數嵌套、閉包函數等知識點彙總而來 器:工具 裝飾: ...
Python初步瞭解裝飾器
- 裝飾器的概念
- 裝飾器的簡單使用
- 裝飾器的進階
- 裝飾器的練習
- 裝飾器的固定模塊
- 裝飾器的語法糖
裝飾器的概念
裝飾器它不是一個新的知識點,它是有之前我們學習的名稱空間、函數嵌套、閉包函數等知識點彙總而來
器:工具
裝飾:為其他事物添加功能
裝飾器:不修該裝飾的源代碼的情況下,不改變源代碼的調用的前提下,對裝飾對象進行功能的增加。
核心思想
開放封閉原則:
開發:對擴展功能的開放,在源代碼不改變的情況下,進行功能的添加
封閉:源代碼是封閉的
import time#內置時間模塊
def inside(group,s):
print('歡迎來到英雄聯盟')
print(f'你所在的是{group}方陣營')
print(f'敵軍還要{s}秒到達戰場')
time.sleep(s)#設置時間間隔
print('全軍出擊')
inside('紅色',30)
#tine.time()時間搓從1970年開始
方案1
#沒有修改調用方式,倒是修改了源代碼
import time#內置時間模塊
def inside(group,s):
stm_time=time.time()
print('歡迎來到英雄聯盟')
print(f'你所在的是{group}方陣營')
print(f'敵軍還要{s}秒到達戰場')
time.sleep(s)
print('全軍出擊')
end_time=time.time()
print(end_time-stm_time)
inside('紅色',30)
裝飾器的簡單使用
方案二
代碼冗餘
import time
def inside(group,s):
print('歡迎來到英雄聯盟')
print(f'你所在的是{group}方陣營')
print(f'敵軍還要{s}秒到達戰場')
time.sleep(s)
print('全軍出擊')
stm_time=time.time()
inside('紅色',30)
end_time=time.time()
print(end_time - stm_time)
方案三
調用方式被修改
import time
def inside(group,s):
print('歡迎來到英雄聯盟')
print(f'你所在的是{group}方陣營')
print(f'敵軍還要{s}秒到達戰場')
time.sleep(s)
print('全軍出擊')
def worap():
stm_time=time.time()
inside('紅色',30)
end_time=time.time()
print(end_time - stm_time)
worap()
方案四
import time
def inside(group,s):
print('歡迎來到英雄聯盟')
print(f'你所在的是{group}方陣營')
print(f'敵軍還要{s}秒到達戰場')
time.sleep(s)
print('全軍出擊')
def worap(*args,**kwargs):
stm_time=time.time()
inside(*args,**kwargs)
end_time=time.time()
print(end_time - stm_time)
worap('藍色',30)
方案五
import time
def inside(group,s):
print('歡迎來到英雄聯盟')
print(f'你所在的是{group}方陣營')
print(f'敵軍還要{s}秒到達戰場')
time.sleep(s)
print('全軍出擊')
def ouct(func):
# func=inside
def worap(*args,**kwargs):
stm_time=time.time()
func(*args,**kwargs)
end_time=time.time()
print(end_time - stm_time)
return worap
res=ouct(inside)
res('藍色',10)
裝飾器的進階
方案六
import time
def inside(group,s):
print('歡迎來到英雄聯盟')
print(f'你所在的是{group}方陣營')
print(f'敵軍還要{s}秒到達戰場')
time.sleep(s)
print('全軍出擊')
def ouct(func):
# func=inside
def worap(*args,**kwargs):
stm_time=time.time()
func(*args,**kwargs)
end_time=time.time()
print(end_time - stm_time)
return worap
inside=ouct(inside)
inside('藍色',10)
方案七
添加一個充電功能
import time
def inside(group,s):
print('歡迎來到英雄聯盟')
print(f'你所在的是{group}方陣營')
print(f'敵軍還要{s}秒到達戰場')
time.sleep(s)
print('全軍出擊')
def recharn(num):
for i in range(num,101):
time.sleep(0.05)
print(f'\r當前電量{"‖"*i}{i}%',end='')
print('電量已充滿。')
def ouct(func):
# func=inside
def worap(*args,**kwargs):
stm_time=time.time()
func(*args,**kwargs)
end_time=time.time()
print(end_time - stm_time)
return worap
inside=ouct(inside)
inside('藍色',10)
recharn=ouct(recharn)
recharn(20)
方案八
import time
def inside(group,s):
print('歡迎來到英雄聯盟')
print(f'你所在的是{group}方陣營')
print(f'敵軍還要{s}秒到達戰場')
time.sleep(s)
print('全軍出擊')
def recharn(num):
for i in range(num,101):
time.sleep(0.05)
print(f'\r當前電量{"‖"*i}{i}%',end='')
print('電量已充滿。')
def ouct(func):
# func=inside
def worap(*args,**kwargs):
stm_time=time.time()
res=func(*args,**kwargs)
end_time=time.time()
print(end_time - stm_time)
return res
return worap
recharn=ouct(recharn)
recharn(20)
裝飾器的語法糖
方案九
import time
def ouct(func):
# func=inside
def worap(*args,**kwargs):
stm_time=time.time()
res=func(*args,**kwargs)
end_time=time.time()
print(end_time - stm_time)
return res
return worap
@ouct
def inside(group,s):
print('歡迎來到英雄聯盟')
print(f'你所在的是{group}方陣營')
print(f'敵軍還要{s}秒到達戰場')
time.sleep(s)
print('全軍出擊')
@ouct
def recharn(num):
for i in range(num,101):
time.sleep(0.05)
print(f'\r當前電量{"‖"*i}{i}%',end='')
print('電量已充滿。')
recharn(20)
inside('紅色',10)
裝飾器的固定模塊
def oute(funs):
def waropper(*arges,**kwargs):
res=funs(*arges,**kwargs)
return res
return waropper
# 時間差模塊
import time
def oute_time(funs):
def waropper(*arges,**kwargs):
cmd_time=time.time()
res=funs(*arges,**kwargs)
out_time=time.time()
print(out_time-cmd_time)
return res
return waropper
@oute_time
def home():
time.sleep(2)
print('estdsfs')