565221708 发表于 2019-12-13 16:29:44

小白请教装饰器的问题

在小甲鱼的书中装饰器这一节,给出的范例程序是:
def log(func):
def wrapper():
   print('开始调用eat函数')
   func()
   print('结束调用eat函数')
return warpper
def eat():
    print('开始吃了')
eat = log(eat)
恕小弟愚钝,今天刚刚学习这部分章节,不是很了解。这个eat = log(eat)是个什么意思,我知道log(eat),但是赋给eat是个什么意思?书上最后运行eat()函数,eat()这个不是在调用定义的eat()函数吗?按照定义的不是只打印开始吃了吗为什么还打印了开始调用。。。和结束调用。。。,小弟实在没看懂

塔利班 发表于 2019-12-13 18:13:55

万物皆对象,函数也是,可以把函数名当参数传给外部河南省,用于内层调用同时添加功能

zltzlt 发表于 2019-12-13 18:51:17

eat 函数是 log(eat) 的返回值,所以函数代码左右两端会添加两句代码:print('开始调用 eat 函数') 和 print('结束调用 eat 函数')。

梅花千朵仓九公 发表于 2020-4-25 11:02:14

为什么最后要调用eat(),而不是在eat=log(eat)时打印结果
页: [1]
查看完整版本: 小白请教装饰器的问题