求问闭包和函数调用问题理解求助。
def log(func):def wrapper():
print("start")
func()
print("stop")
return wrapper #这里为什么是return wrapper,而不是return wrapper()
def eat():
print("开始吃了")
接着运行代码
eat=log(eat)
eat()
运行后代码显示:
“start”
“开始吃了”
“stop”
小甲鱼的书上关于装饰器的解释的例子。
1、在调用时为什么要eat=log(eat)这里的eat是否等于代码里面的func?
2、代码里面的return wrapper ,调用函数不是应该用return wrapper()么?这里要括号和不要括号的区别是什么?
实际我把这个括号加了再运行,发现调用函数时,只需要eat=log(eat),程序就自动接下来运行了,不需要再加上eat()。不懂这是为什么。
本帖最后由 jackz007 于 2021-1-21 15:19 编辑
def log(func):
def wrapper():
print("start")
func()
print("stop")
return wrapper # 函数 log() 的返回值是其内嵌函数的调用地址以便在 log() 意外也可以被随意调用
def eat():
print("开始吃了")
a = log(func)
a() # 调用 log() 内嵌函数 wrapper()
log(func)() # 调用 log() 内嵌函数 wrapper()
运行一下这个代码,就可以加深理解 Python 关于函数地址赋值的事
i , p = input , print # i、p 分别取得 Python 内建函数 input() 、print() 的调用地址
p('你好' , i('姓名 : ')) # 使用变量 i、p 完成对 input() 和 print() 的调用
本例中作为 log() 输入参数的 func 应该是另一个函数的调用地址。 jackz007 发表于 2021-1-21 15:07
运行一下这个代码,就可以加深理解 Python 关于函数地址赋值的事
本例中作为 log()...
本例中作为 log() 输入参数的 func 应该是另一个函数的调用地址。
就是说func实际上是 def eat()这个函数的调用地址的意思不? KONGYIYAO 发表于 2021-1-21 19:10
本例中作为 log() 输入参数的 func 应该是另一个函数的调用地址。
就是说func实际上是 def eat() ...
我说的是这个
def log(func):
def wrapper():
. . . . . .
func()
页:
[1]