Q.1:第二次调用display时,为什么不调用print('inside external')或为什么不进行内层外部打印?
Q.2:我们只是提供包装器(函数名称)而不实际调用它,那么包装器函数是如何调用的,是装饰器功能在返回时在内部调用该函数?
代码:
def outer(func):
def wrapper():
print('inside wrapper func')
func()
print('inside outer')
return wapper
@outer
def display():
print('inside display')
display()
display()
Output:
inside outer
inside wrapper func
inside display
inside wrapper func
inside display
答案 0 :(得分:0)
在函数式编程中,您刚刚做的事情称为副作用。函数是要返回一个值,但是您通过打印到控制台引入了副作用!
在回答Q1时,外部函数仅被调用一次,您立即执行@outer。即使您不调用显示,仅对其进行装饰也将在内部打印。试试看!因此,在调用display时,就是在调用包装函数。
回答第二季度,饼图语法(@)仅表示display = external(display) 现在,它的作用是打印“ inside external”,然后返回包装函数。因此,当您调用display时,您没有在调用包装器的外部函数。现在显示就像是包装器的笔名。
答案 1 :(得分:-1)
第二季度
仅提供包装器(函数名称)而不实际调用它,然后包装器函数如何调用
这就是python装饰器的工作原理
第一季度
在装饰器定义中,我们只需调用一个命令即可使装饰器正常工作
返回包装器
需要两个命令时
print('inside external') 返回包装器
我的最佳猜测是包装器定义方法仅加载一次,并且第二次仅重用之前加载的已编译代码