python学习-day11-装饰器

视频链接: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")

 

你可能感兴趣的:(python)