python学习day12 装饰器进阶

# 装饰器的进阶
# functools.wraps
# 带参数的装饰器
# 多个装饰器装饰同一个函数

# 装饰器
# 开发原则 : 开放封闭原则
# 装饰器的作用 :在不改变原函数的调用方式的情况下,在函数的前后添加功能
# 装饰器的本质 : 闭包函数

# def wrapper(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 '好开心'
#
# ret = holiday(3)
# print(ret)


# def outer(*args):  #定义是聚合,调用是打散
#     print(args)
#     print(*args)
#     def inner(*args):
#         print('inner : ',args)
#     inner(*args)
# outer(1,2,3,4)

# from functools import wraps
# def wrapper(func):
#     @wraps(func)
#     def inner(*args,**kwargs):
#         print('之前')
#         ret = func(*args,**kwargs)
#         print('之后')
#         return ret
#     return inner
# @wrapper
# def holiday(day):
#     '''
#
#     :param day:
#     :return:
#     '''
#     print('放假%s天'%day)
#     return 'happly'
# holiday(1)
# # print(holiday.__name__) #holiday其实是指向inner
# # print(holiday.__doc__)  #显示注释
# print(holiday.__name__)    #引入了函数waper就可以以原名字调用原函数
# print(holiday.__doc__)

# 带参数的装饰器(就是多了一个可以控制装饰器的函数嵌套)
#就是控制装饰器是否工作

# import time
# from functools import wraps
# FLAG = False
# def timmer_out(flag):
#     def timmer(func):
#         @wraps(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_out(FLAG)
# def wahaha():
#     time.sleep(0.1)
#     print(wahaha.__name__)
#
# @timmer_out(FLAG)
# def shuangyy():
#     time.sleep(0.1)
#     print(shuangyy.__name__)
#
# wahaha()
# shuangyy()

#多个装饰器装饰一个函数
# 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())

 

转载于:https://www.cnblogs.com/wujunjie-sir/p/9195715.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值