python中装饰器语句为何会在编译时就运行?
在学习装饰器时,对装饰器函数在编译时就运行有点没搞懂,我一直以为函数应当在被调用时才会被运行。网上找资料也大部分是说装饰器函数在编译时就运行了。但却没说为啥需要在编译时就运行。因此想知道为何装饰器需要在编译时运行?
def dec(fun):
print("call dec")
def in_dec():
print("call in_dec")
fun()
print id(in_dec)
return in_dec
@dec
def fun():
print("call fun")
print(type(fun))
print id(fun)
fun()
call dec
4299997384
<type 'function'>
4299997384
call in_dec
call fun
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这里牵涉到
闭包
和自由变量
的概念, 关注下面的a_list
变量,如果每次在调用时重新运行那么就起不到这个效果了:你再看下下面这种是不是你要的效果: