装饰器

装饰器

开放关闭原则

  1. 代码扩展进行开放
  2. 修改源代码是封闭
  3. 在不修改源代码以及调用方式,对功能额外添加的就是开放封闭原则

不用装饰器会代码冗余

# import time
# def cen1():
#     time.sleep(2)
#     print("你好1")
# def cen2():
#     print("你好2")
# def cen3():
#     print("你好3")
# time_start=time.time()
# cen1()
# print(time.time()-time_start)
#
# time_start=time.time()
# cen2()
# print(time.time()-time_start)

不太完美的装饰器

# import time
# def cen1():
#     time.sleep(2)
#     print("你好1")
# def cen2():
#     print("你好2")
# def cen3():
#     print("你好3")
#
# def func():
#     def foo(f):
#         time_start=time.time()
#         f()
#         print(time.time()-time_start)
#     return foo
# f=cen1
# cen1=func()
# cen1(f)

第一版装饰器

# import time
# def cen1():
#     time.sleep(2)
#     print("你好1")
# def cen2():
#     print("你好2")
# def cen3():
#     print("你好3")
#
# def func(f):
#     def foo():
#         time_start=time.time()
#         f()
#         print(time.time()-time_start)
#     return foo
# cen1=func(cen1)
# cen1()

语法糖

# import time
# def func(f):
#     def foo():
#         time_start=time.time()
#         f()
#         print(time.time()-time_start)
#     return foo
# @func#省略了把被修饰函数的地址传递给修饰器和将修饰器内的函数地址返回给被修饰的函数的名
# def cen1():
#     time.sleep(2)
#     print("你好1")
# cen1()

这是完美的

# def func(f):
#     def foo(*args,**kwargs):
#         print("修饰前的函数")
#         ret=f(*args,**kwargs)
#         print("修饰后的函数")
#         return ret
#     return foo
# @func
# def cen(*args,**kwargs):
#     print(f"被修饰的函数{args,kwargs}")
#     return "我是cen函数"
# print(cen(1,2,3,a=1))

这是终结规则

# 1.装饰器

# 开发封闭原则:
# 1.对扩展开放
# 2.对修改源代码及调用方式封闭

# 装饰器:不修改源代码及原调用方式的前提下,额外增加新功能

# 语法糖:写在被装饰的函数正上方

# def warpper(f):
#     def inner(*args,**kwargs):
#         print("被装饰函数执行前")
#         ret = f(*args,**kwargs)
#         print("被装饰函数执行后")
#         return ret
#     return inner
#
# @warpper
# def func(*args,**kwargs):
#     print(f"被装饰的{args,kwargs}")
#     return "我是func函数"
# print(func(1,2,3,4,5,6,7,8,a=1))


# def warpper(f):
#     def inner(*args,**kwargs):
#         f(*args,**kwargs)
#     return inner
#
# @warpper
# def func():
#     print(111)

转载于:https://www.cnblogs.com/python25/p/11402561.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值