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")

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章