Python 3.12.1 (tags/v3.12.1:2305ca5, Dec 7 2023, 22:03:25) [MSC v.1937 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information. 一、 回顾上节课内容
总结:1、利用嵌套函数的外层作用域具有记忆能力的这个特性。
2、将内层函数作为返回值给返回
提出新的问题:能不能把一给函数作为参数传递给另一个函数呢?
def myfunc(): (测试函数)
print("正在调用myfunc...")
myfunc() 上面的程序,在编辑模式下点击“file”中的“save”保存后,再点击“run”中的“run module”后,在互动模式下的运行效果:
=================== RESTART: D:/谷兴武/创客/python学习/时间管理大师装饰器.py ===================
开始运行程序...
I love Little sister.
结束程序运行...
一共耗费了2.04秒。
理解一下装饰器到底是怎么实现的呢?它的原理、它的本质是什么呢?认真看代码,那不就是闭包吗,还有前面刚介绍的新知识:拿函数当参数,综合起来就是装饰器。大家看到这个@加装饰器的名字:@time_master,其实这是一个语法糖,装饰器原来的样子应该是这样的,看下面修改后的程序:
import time
def myfunc():
time.sleep(2)
print("I love Little sister.") 那下面这调用了time_master并且把myfunc给传递进去,所以它这时候并不会调用,而是返回它内部的call_func,把这个内部call_func赋值给这个myfunc.
@time_master是装饰器的语法糖,相当于后面我们在调用myfunc的时候,并不是直接调用myfunc,而是把myfunc这个函数作为一个参数塞到上面这个装饰器里面,然后去调用这个装饰器。
myfunc=time_master(myfunc)
myfunc() (那么下面我们调用这myfunc的时候,实际上是调用了call_func)
程序运行效果是一样的:
=================== RESTART: D:/谷兴武/创客/python学习/时间管理大师装饰器.py ===================
开始运行程序...
I love Little sister.
结束程序运行...
一共耗费了2.03秒。