【问题标题】:How to create decorator calling function 20 times only?如何只创建 20 次装饰器调用函数?
【发布时间】:2020-06-07 16:25:00
【问题描述】:

我需要为函数创建装饰器。它应该是函数的 20 倍返回结果,之后 20 次应该只返回 none 和“内存不足”字符串。

我写了类似的东西,但它调用了 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
...

【问题讨论】:

  • 退货后不能打印
  • 对我来说很好用
  • 如何称呼“addTwo”(编辑问题以将其显示为格式正确的代码)?
  • @martin, 19 结果...你是从 0 开始数的吗?因为如果你这样做了,那么就有 20
  • 在“oomHelper”中,变量“count”必须声明为“nonlocal”。

标签: python decorator


【解决方案1】:

您的原始代码(似乎您在我输入答案时已将其更新为其他内容)将在第一次调用该函数后立即打印 20 条语句。您需要将while 替换为if,实际上是return 的结果,而不是在更新count 后仅调用oomHlper 中的函数。您还需要在oomHelper 中添加nonlocal count 以便它能够更新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

【讨论】:

  • 所以我很接近,但还不够接近。非常感谢亚历山大!
猜你喜欢
  • 2020-04-28
  • 1970-01-01
  • 2021-06-22
  • 1970-01-01
  • 2019-02-22
  • 2019-11-07
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多