zoukankan      html  css  js  c++  java
  • day12.1_闭包函数+装饰器

    一、闭包函数

    闭包的定义:①该函数是一个内部函数

                       ②该函数包含对外部的作用域(非全局作用域)中名字的引用

    1. 为函数体传值的方式

    1.1 使用参数形式

    1.2 包给函数

    def outter(x):
        def inner():
            print(x)
        return inner       #函数当返回值(对象)
    f=outter(1)            #相当于赋值
    f()

    二、装饰器

    1.装饰器是什么?

    ①为被装饰器对象添加额外的功能  ② 可以当成工具,函数就具备某一功能的工具

    装饰器本省可以是任意可调用的对象,被装饰的对象也可以是任意可调用的对象

    2.为什么需要装饰器?

    软件一经发布之后,需要进行版本的更新迭代。软件的维护需遵循开放封闭原则,即对日后修改源代码是封闭的,对扩展功能的是开放的

    装饰器的实现须遵循两大原则:

    ①不修改被装饰对象的源代码

    ②不修改被装饰对象的调用方式

    总的来说,装饰器就是在遵循①②的前提下为被装饰对象添加新功能

    3.装饰器用来干什么?

     1 import time
     2 def index():
     3     print("welcome to index")
     4     time.sleep(3)
     5 def timmer(func):
     6     #func=最原始的index
     7     def wrapper():
     8         start=time.time()
     9         func()
    10         stop=time.time()
    11         print("spend time is %s"%(stop-start))
    12     return wrapper
    13 index=timmer(index)    #index=wrappera函数的内存地址
    14 index()
  • 相关阅读:
    读写配置文件app.config
    UML类图
    我见到James Rumbaugh了!
    获取数据库中的所有表
    通过DataTable获得表的主键
    用例的本质
    用例图
    使用SQLDMO中“接口SQLDMO.Namelist 的 QueryInterface 失败”异常的解决方法
    类如何与界面绑定
    C#使用指针
  • 原文地址:https://www.cnblogs.com/Smart1san/p/9170709.html
Copyright © 2011-2022 走看看