如何仅创建20次装饰器调用函数?

时间:2020-06-07 16:25:00

标签: python decorator

我需要为功能创建装饰器。它应该返回20倍的函数结果,在那之后20次应该仅不返回并且“内存不足”字符串。

我写了类似的东西,但是它调用了40次函数。我是装饰工的新手,有人可以帮助我吗?

我的代码:

   def oom(func):
    count = 0
    def oomHelper(*args):
        if count < 20:
            func(*args)
        else:
            print('Out Of memory')
            return(None)
    return oomHelper
    count = count + 1


@oom
def addTwo(a,b):
    c = a+b
    return(print(c))

addTwo(1,4)
addTwo(1,4)
addTwo(1,4)
.
.
addTwo(1,4)
addTwo(1,4)
addTwo(1,4)
addTwo(1,4)
x25

我除了得到20个结果和5个内存不足之外。但是我得到了:

result1
restult2
.
.
.
result20
out of memory
result21
result22
...

1 个答案:

答案 0 :(得分:1)

您的原始代码(似乎您在输入答案时已将其更新为其他内容)将在第一次调用该函数后立即打印20条语句。您需要将while替换为if,实际上是return的结果,而不仅仅是在更新oomHlper之后调用count内部的函数。您还需要在nonlocal count内添加oomHelper,以便它能够更新count(或者将count声明为一个元素列表并递增该元素)。例如。像这样:

 def oom(func):
    count = 0
    def oomHelper(*args):
        nonlocal count
        if count < 20:
            count = count + 1
            return func(*args)
        else:
            print('Out Of memory')
            return None
    return oomHelper