在装饰器函数中返回包装器

时间:2020-12-30 14:17:04

标签: python

我有一个关于退回包装纸的问题,为什么我必须退回它以及我在哪里退回? 我知道当我返回包装器时它会返回一个指针,但它的原因在哪里以及原因是什么。我不应该在像 def deco(fun) 这样的 deco 函数中调用它:.........wrapper().

import  time

def deco(fun) :
    def wrapper(*args) :
        ba = time.time()

        giden = fun(*args)

        so = time.time()

        print(f"{so-ba} saniye geçti")

        return giden
    return wrapper


@deco
def ortalama (liste):
    t = 0
    for i in liste:
        t += i
    return t

liste = list(range(0,10))
a = ortalama(liste)
print(a)

2 个答案:

答案 0 :(得分:0)

deco 接受一个函数作为参数并返回一个函数。

当您应用它时,ortalama 函数将替换为 deco(ortalama)

答案 1 :(得分:0)

装饰器函数封装了目标函数,可以操作它们的输入和输出值。返回内部包装函数替换目标函数内。

使用装饰器注解,函数被包装函数改变。

> print(ortalama)

<function deco.<locals>.wrapper at 0x7f7d6beea048>

没有装饰器,函数仍然是定义的

> print(ortalama)

<function ortalama at 0x7f7d6beea158>