python 装饰器的基本原理

#装饰器的本质 就是函数,功能是为其他函数添加附加功能
#原则:
# 不修改被修饰函数的源代码,不修改被修饰函数的调用方式
# import time
# def cal(l):
#     start_time=time.time()
#     res=0
#     for i in l:
#         time .sleep(0.1)
#         res+=i
#     stop_time=time.time()
#     print('函数的运行时间是%s'%(stop_time-start_time))
#     return res
# print(cal(range(100)))
                               #装饰器=高阶函数+函数嵌套+闭包
import time
def foo():
    time.sleep(0.2)
    print('彭亮')
#不修改源代码 不修改foo调用方式
def timer (func):
    start_time=time.time()
    func()
    stop_time=time.time()
    print('运行时间%s'%(stop_time-start_time))
    return func
foo=timer(foo)
foo()
#装饰器本身就是函数
# 装饰器就是闭包函数的一种应用场景
# 二 什么是装饰器
#
# 装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象。
# 强调装饰器的原则:1 不修改被装饰对象的源代码 2 不修改被装饰对象的调用方式
# 装饰器的目标:在遵循1和2的前提下,为被装饰对象添加上新功能
def deco(obj):
    print('===========',obj)
    obj.x=1
    obj.y=2
    obj.z=3
    return obj
### @deco是全局变量
# @deco  # 装饰器的原理就是 运行了deco 目的是:test=deco(test)   deco把test传入进去同时得到一个(返回值 传给func)  再赋给test
# def test():
#     print('test函数运行')
# print("+"*20)
# @deco  #就是相当于 Foo=deco(Foo)
# class Foo:
#     pass
# print(Foo.__dict__)
 #  @ 不仅可以在函数前面加  还可以在类前面加
print("-------------------"*30)
# @deco
def test(): # 一切皆对象 test 也是对象
    print('test')
test.x=1
test.y=2
print(test.__dict__)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值