首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么python装饰器函数要嵌套一个函数?

为什么python装饰器函数要嵌套一个函数?
EN

Stack Overflow用户
提问于 2017-06-02 19:42:15
回答 1查看 38关注 0票数 0
代码语言:javascript
复制
def log(func):
     def wrapper(*args, **kw):
         print('call %s():' % func.__name__) 
         return func(*args, **kw)
     return wrapper
@log
def now():
     print('2017-5')

为什么要在中间嵌套包装器函数,为什么不呢?这是我在stackoverflow中的第一个问题,而且我不擅长英语.so我的描述有任何问题,请原谅我的.Thanks!

代码语言:javascript
复制
def log(func):
    print('call %s():' % func.__name__)
    return func(*args, **kw)
@log
def now():
    print('2017-5')
EN

回答 1

Stack Overflow用户

发布于 2017-06-02 19:50:03

稍微了解一下装饰器:

代码语言:javascript
复制
@decorator
def func():
    ...

恰好等于:

代码语言:javascript
复制
func = decorator(func)

正如您所注意到的,在第一个选项中,当您的程序中调用函数now时,任何时候都会调用print('call %s():' % func.__name__)。在第二个选项中,当装饰器仅在不调用now的情况下应用时,将调用此print

使用嵌套函数是因为decorator用修改后的函数替换了原来的函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44328078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档