zoukankan      html  css  js  c++  java
  • day11 装饰器

    什么是装饰器

    开放封闭原则

    软件一旦上线后,就应该遵循开放封闭原则。对修改源代码是粉笔的,对功能的拓展是开放的也就是说我们必须找到一种解决方案:能够在不修改一个功能源代码以及调用方式的前提下,为其加上新功能

    总结

    原则如下

    1.不修改源代码

    2.不修改调用方式

    目的

    在1和2元则的基础上拓展新功能

    什么是装饰器

    装饰器即在不修改被装饰对象源代码与调用方式的前提下,为装饰器对象添加新功能

    装饰器与被装饰的对象均可以是任意调用的对象

    装饰器=>函数

    被装饰的对象=>函数

    语法糖

    被装饰函数的正上方,单独一行
            @deco1
            def foo():
                pass
            foo=deco1()
    而且语法糖的先后顺序也会影响代码执行结果

    # import time  引入time库
    #定义了一个闭包函数(最高嵌套3层) # def timer(func):
    #   函数内部包含一个函数,且引用函数内部的变量即闭包函数,闭包函数从自身所在名称空间出发寻找变量,找不到就跳出本层找,直到找到内置名称空间 # def wrapper(*args,**kwargs):
    #          *args和**kwargs保证了能接收任何参数
    #     代码块 # start_time = time.time() # res=func(*args,**kwargs) #调用最原始的index
    #           上面接收什么,这里就会接收什么 # stop_time = time.time() # print('run time %s' % (stop_time - start_time)) # return res #这个是干嘛的,只知道是返回最原始的index # return wrapper #返回的是wrapper函数名对应的内存地址,可以加()直接调用 # # @timer #语法糖,相当于index=timer(index) # def index(): # time.sleep(1、 # print('welcome to index page') # return 123 # @timer # def home(name): # time.sleep(2) # print('welcome %s to index page' %name) # # index() # home('egon')

      



  • 相关阅读:
    机器学习踩坑之Win10+Ubuntu双系统安装踩坑经验
    面向对象
    模块(三)
    模块(二)
    模块之日志
    包的基础使用
    模块介绍
    递归
    匿名函数与三元表达式
    生成器与迭代器
  • 原文地址:https://www.cnblogs.com/shanjinghao/p/8669829.html
Copyright © 2011-2022 走看看