装饰器|高阶函数|嵌套函数|闭包

匿名 (未验证) 提交于 2019-12-03 00:03:02

摘要:

本质:装饰器本质是函数

功能:为函数添加附加功能

原则:

1.不修改源代码

2.不改变原函数调用方式

构成:高阶函数+嵌套函数+闭包

高阶函数定义: 1.函数接收的参数是一个函数名 2.函数的返回值是一个函数名 3.满足上诉条件任意一个,就是告诫函数 ''' #高阶函数之接收参数是一个函数 def foo():     print('接受的参数是一个函数名') def test(func):  ##这是高阶函数     print(func)  ##<function foo at 0x00000193D739C2F0>函数内存地址     func() test(foo)  ##高阶函数之返回值是一个函数名 def foo1():     print('返回一个函数名') def test1(func):     return func res = test1(foo1) print(res) ##函数内存地址:<function foo1 at 0x0000021248747400> res()      ##加括号就可以调用函数  ##函数即变量,可以进行赋值;增加功能不改变调用方式的原理 def foo2():     print('返回一个函数名') def test2(func):     return func foo2 = test2(foo2) print(foo2) foo2()
高阶函数
##增加功能,但不改变调用方式 def foo3():        ##源程序     time.sleep(3)     print('这是原函数') def timer(func):   ##增加附加功能程序     print('这是增加附加功能的函数')     start_time = time.time()     func()     stop_time = time.time()     print('运行时间%s'%(stop_time-start_time))     return func foo3 = timer(foo3)     ##将增加功能的函数赋值给原函数名 foo3()                 ##调用方式不变
增加附加功能
#函数的嵌套:def 内再定义def  def father(name):     print('from father:%s'%name)     def son():         print('from the son')     print(locals())  ###打印该层的变量:{'name': 'alex', 'son': <function father.<locals>.son at 0x00000167705B2488>}     son() father('alex') ##函数闭包(封装变量):嵌套函数变量,同级别优先,没有依次向外层找,知道找到为止 def father(name):     def son():         print('嵌套第二层,没有变量赋值')         def grandson():             print('嵌套第三层,有局部变量赋值')             name = '同级有局部变量,优先'             print('嵌套第三层:%s'%name)         grandson()     son() father('alex')
嵌套函数及闭包
#装饰器的框架  高阶函数 def timmer(func):     return func #高阶函数+嵌套+闭包【装饰器基本框架】 def timmer(func):    ##【高阶函数:输入或返回函数名】     def wrapper():   ##【嵌套】         print(func)  ##【闭包】函数即变量,同级没有,向外层找,直到找到为止         func()     return wrapper  #装饰器的应用(将添加功能的函数以变量形式赋给原程序名)  def add_func(func):     print('这是高阶函数')     def qiantao():         print('这是嵌套函数:实现附加功能')         func()     return qiantao  def origin_func():     print('这是原程序:实现原始功能') res = add_func(origin_func) res()   ##1.没改变源代码 2.没改变调用方式  3.为源代码添加了附加功能  ##装饰器(语法糖) #@add_func  就相当于执行了:在需要修饰的函数前加上@add_func ''' res = add_func(origin_func) res() ''' def add_func(func):     print('这是高阶函数')     def qiantao():         print('这是嵌套函数:实现附加功能')         func()     return qiantao @add_func def origin_func():     print('这是原程序:实现原始功能') origin_func()
装饰器框架及应用

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!