我需要为功能创建装饰器。它应该返回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
...
答案 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