视频链接:https://www.bilibili.com/video/BV1SE411N7Hi?p=69
课件:https://guobaoyuan.gitee.io/new_book/Python/14-0%20Python%E5%9F%BA%E7%A1%80%E8%A3%85%E9%A5%B0%E5%99%A8.html
以下内容仅供个人学习使用,侵删
#!/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")