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()
原文地址:https://www.cnblogs.com/Smart1san/p/9170709.html