【问题标题】:Python passing a function into a function: why do we use decorators?Python 将函数传递给函数:我们为什么要使用装饰器?
【发布时间】:2020-05-10 06:56:11
【问题描述】:

当我们只能使用 1 层时,为什么我们要使用具有 2 层功能的装饰器?

例如:

def time_func(func):
    print('Starting')
    t0=time()
    out = func()
    print('Ending',time()-t0
    return out

现在 time_func() 可以接收任何函数并像装饰器一样完成它的工作。我错过了什么?

【问题讨论】:

  • 装饰器在每次调用装饰函数时被调用。
  • user2357112 我试过了,我没有把它用作装饰器。我只是把它当作一个函数来使用。
  • 和MaxiMouse,那么如果每次调用装饰函数时都没有调用装饰器怎么办?我知道它在技术上是这样工作的,但在实践中有什么好处?
  • 装饰器被调用一次并且应该返回一个替换被装饰函数的函数。根据这个定义,你的问题的答案应该是显而易见的。

标签: python python-decorators


【解决方案1】:

根据定义,装饰器接受一个函数并返回一个替换装饰函数的新函数。你的函数不会那样做,你的函数只是接受一个函数并调用它;那不是装饰器,这只是一个函数接受回调的行为。

至于你为什么要使用装饰器,它是在不将代码写入函数本身的情况下为函数添加功能,既保持装饰函数更简单,又保持装饰行为可重用。唯一的另一种选择是让调用者有责任包装每个函数调用,但这显然也不是很明智。

【讨论】:

  • 当回调似乎能够以更直接的方式完成相同的事情时,您能否详细说明为什么装饰器优于回调?为什么只包装函数调用是不明智的?
猜你喜欢
  • 2021-11-15
  • 2016-01-30
  • 2021-11-21
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
  • 2013-07-09
  • 2021-07-13
相关资源
最近更新 更多