我已经开始了一个新项目,我想创建一个函数,我们将其命名为foo,它会记住之前对其进行的调用。因此,如果函数应该返回最后使用的参数,我们应该这样:print(foo(2), foo(7), foo('a'))打印出:None 2 7问题我们如何创建一个装饰器函数,例如调用bar它打印给定的参数,除非前一个函数调用与前一个相同,在这种情况下,该函数不打印任何内容,只是返回 None 。我设法做了什么?到目前为止,我已经能够创建该函数的框架,如下所示:@bardef printer(*args): print(*args)在 bar 函数中,我应该以某种方式检查之前的调用,但我不知道如何!我不想使用全局变量或其他东西,而只想使用函数。bar我假设我需要对and函数使用闭包foo。你能告诉我如何实施它们吗?注意 ,这些调用应该发生以下情况:printer("a") # prints aprinter("a") # only returns None printer("a") # only returns Noneprinter("b") # prints bprinter("a") # prints a
1 回答
有只小跳蛙
TA贡献1824条经验 获得超8个赞
foo首先编写一个您希望装饰器生成的版本,例如
def foo(arg, prev=[]):
if arg in prev[-1:]:
return None
else:
prev.append(arg)
return arg
>>> print(foo(1), foo(2), foo(2), foo(3))
1 2 None 3
现在您知道您希望装饰器做什么。
def bar(f):
def bar(arg, prev=[]):
if arg in prev[-1:]:
return None
else:
prev.append(arg)
return(f(arg))
return bar
现在重新定义foo没有内存,但包裹在装饰器中:
@bar
def foo(arg):
return arg
>>> print(foo(1), foo(2), foo(2), foo(3))
1 2 None 3
添加回答
举报
0/150
提交
取消