視頻鏈接:https://www.bilibili.com/video/BV1SE411N7Hi?p=69
以下內容僅供個人學習使用,侵刪
#!/usr/bin/env python
# -*- coding:utf-8 -*-
'''
裝飾器:在不修改源代碼及調用方法的前提下,額外增加新的功能
開發封閉原則:(符合開發封閉原則的,就是裝飾器)
1.對額外新增的功能是開發
2.對源代碼及調用方式是封閉
'''
import time
def run_time(f):
def inner():
'''
計算時間的函數
:param f: 接受要計算時間的函數名
:return:
'''
start_time = time.time()
f()
time.sleep(2)
stop_time=time.time()
print(f"運行時間:{stop_time-start_time}")
return inner
def func():
print("aa")
def foo():
print("bb")
def f1():
print("cc")
func=run_time(func)
func()
#標準版的裝飾器
def wrapper(func):
def inner(*args,**kwargs):
'''執行被裝飾函數前'''
func(*args,**kwargs)
'''執行被裝飾函數後'''
return inner
def foo(*arg):
print(arg)
foo=wrapper(foo)
foo(10,12,5,56,77,87,8,98)
#-------------------------------
def wrapper(func):
'''平臺'''
def inner(*args,**kwargs):
ret=func(*args,**kwargs)
return ret
return inner
@wrapper#語法糖,就可以省略tb=wrapper(tb)
def tb(money):
'''賣家'''
print("賣了一個皮包")
return 'lv'
print(tb(500))#買家花500買了一個皮包
#--------------------------
'''
模擬打遊戲,王者榮耀
遊戲函數實現的事情:
1.展示打開遊戲
2.站視選擇的英雄,英雄是可以變化的
3.展示開始遊戲
4.展示結束遊戲
5.返回輸了
'''
def wrapper(func):
def inner(*args,**kwargs):
print("開掛")
ret=func(*args,**kwargs)
print("關掛")
return ret
return inner
@wrapper
def game(role):
print("打開遊戲")
print(f"選擇{role}")
print("開始遊戲")
print("結束遊戲")
return"fail"
ret=game("author")
if ret==True:
print("happy")
print("play again")
else:
print("play again")