zoukankan      html  css  js  c++  java
  • python学习第十二天 装饰器进阶

    1.wraps

    from functools import wraps
    def wrapper(func): #func = holiday
    @wraps(func)
    def inner(*args,**kwargs):
    print('在被装饰的函数执行之前做的事')
    ret = func(*args,**kwargs)
    print('在被装饰的函数执行之后做的事')
    return ret
    return inner

    @wrapper #holiday = wrapper(holiday)
    def holiday(day):
    '''这是一个放假通知'''
    print('全体放假%s天'%day)
    return '好开心'

    print(holiday.__name__)
    print(holiday.__doc__)
    ret = holiday(3) #inner
    print(ret)


    # def wahaha():
    # '''
    # 一个打印娃哈哈的函数
    # :return:
    # '''
    # print('娃哈哈')

    # print(wahaha.__name__) #查看字符串格式的函数名
    # print(wahaha.__doc__) #document

    2.装饰器进阶
    #带参数的装饰器
    #500个函数
    # import time
    # FLAGE = False
    # def timmer_out(flag):
    # def timmer(func):
    # def inner(*args,**kwargs):
    # if flag:
    # start = time.time()
    # ret = func(*args,**kwargs)
    # end = time.time()
    # print(end-start)
    # return ret
    # else:
    # ret = func(*args, **kwargs)
    # return ret
    # return inner
    # return timmer
    # # timmer = timmer_out(FLAGE)
    # @timmer_out(FLAGE) #wahaha = timmer(wahaha)
    # def wahaha():
    # time.sleep(0.1)
    # print('wahahahahahaha')
    #
    # @timmer_out(FLAGE)
    # def erguotou():
    # time.sleep(0.1)
    # print('erguotoutoutou')

    # wahaha()
    # erguotou()

    #多个装饰器装饰一个函数
    def wrapper1(func):
    def inner1():
    print('wrapper1 ,before func')
    ret = func()
    print('wrapper1 ,after func')
    return ret
    return inner1

    def wrapper2(func):
    def inner2():
    print('wrapper2 ,before func')
    ret = func()
    print('wrapper2 ,after func')
    return ret
    return inner2

    def wrapper3(func):
    def inner3():
    print('wrapper3 ,before func')
    ret = func()
    print('wrapper3 ,after func')
    return ret
    return inner3

    @wrapper3
    @wrapper2
    @wrapper1
    def f():
    print('in f')
    return '哈哈哈'

    print(f())

    #记录用户的登录情况
    #计算这个函数的执行时间








  • 相关阅读:
    c#中的Unity容器
    c# Task 篇幅二
    C# Task 篇幅一
    多线程Thread,线程池ThreadPool
    第十二章:二叉查找树(1)
    第十章:基本数据结构(2)
    第十章:基本数据结构(1)
    第十章:基本数据结构(0)
    劝学
    CentOS7安装Docker CE
  • 原文地址:https://www.cnblogs.com/xubohua/p/8169182.html
Copyright © 2011-2022 走看看