函数调用问题
问题1, 为什么可以通过通过return来调用wapper函数
def log(func):
def wapper():
print(func())
return wapper
问题2:
为什么通过return wapper,就可以输出wapper函数里面的print(),调用wapper函数返回的是什么,为什么return能吧函数内的print展现出来,这我不知道怎么去描述这个问题,就是绕不过来这个弯,也不知道怎么去百度
问题3:
装饰器传参,func应该传给def log(name=None)这里,可是log('1')又带了参数,互相不就冲突了吗?
为什么log里面的函数可以接收func 比如:`decorator(func)`,
def log(name=None):
def decorator(func):
def wapper():
print("{} -> {}".format(name,func.__name__))
func()
return wapper
return decorator
@log('1')
def run():
print('hello word')
run()
正在回答 回答被采纳积分+1
同学,你好。
问题1:return返回数据,并退出程序,return wapper语句没有调用wapper函数,只是返回了wapper对象。
问题2:同学可能还是在疑惑第一个问题,return wapper语句没有调用wapper函数,只是返回了wapper对象,因此同学第二个问题是不成立的,老师对于第二个问题给了如下回答:通过return wapper,不能执行wapper函数里面的print(),因为return wapper并没有调用程序;调用wapper函数没有返回数据,里面执行了一个print(func())输出语句,return 和执行print没有关系,执行print是因为调用了wapper函数,且不是return进行调用的;
问题3:程序编译如下代码
@log('1') def run(): print('hello word')
过程如下:log('1')调用得到decorator,因此得到@decorator,@decorator相当于run = decorator(run),得到run = wapper,因此上面的代码执行完成后run就相当于wapper函数,调用run()就相当于调用wapper(),因此结果如图:
这一块的内容比较难理解,同学可多花时间看视频理解。
如果解决了你的疑惑,请采纳,祝学习愉快~
- 参与学习 人
- 提交作业 2727 份
- 解答问题 8160 个
想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星