首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >底层装潢工

底层装潢工
EN

Stack Overflow用户
提问于 2018-09-28 11:02:48
回答 1查看 52关注 0票数 1

任务是使用装饰器4次调用函数。解决办法是:

代码语言:javascript
复制
def my_decorator (func):
    def wrapper():
        func()
        func()
        func()
        func()
    return wrapper

@my_decorator
def printer_hp():
    print('I am printer HP 4700 LaserJet')
    return 0

printer_hp()

但是,如果我将func移到包装器args并为@my_decorator添加括号:

代码语言:javascript
复制
def my_decorator ():
    def wrapper(func):
        func()
        func()
        func()
        func()
    return wrapper

@my_decorator()
def printer_hp():
    print('I am printer HP 4700 LaserJet')
    return 0

该函数在主程序中自动调用4次,而不调用它。为什么会这样呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-28 11:12:56

因为当你这样做:

代码语言:javascript
复制
@my_decorator()
def printer_hp():
    ...

它相当于:

代码语言:javascript
复制
printer_hp = my_decorator()(printer_hp)

由于my_decorator()返回wrapper,因此它相当于:

代码语言:javascript
复制
printer_hp = wrapper(printer_hp)

wrapper所做的就是调用给定的函数4次,这就是为什么printer_hp被立即调用4次的原因。

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

https://stackoverflow.com/questions/52553954

复制
相关文章

相似问题

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