python有没有办法记住脚本中执行的最后一个函数,然后再次调用它?
说我有两个功能:
def a(name = None):
return "Hello " + name
def b(say = "something"):
return "I will say " + say
这些函数的作用现在大多无关紧要。我只想知道是否有一种方法可以实现一个repeat()函数,该函数将重复a()或b()取决于上次执行的函数。
先感谢您!
回答
您可以使用装饰器来实现
latest = None
latest_args = None
latest_kwargs = None
def my_decorator():
def decorate(func):
def wrapper(*args, **kwargs):
global latest
global latest_args
global latest_kwargs
latest = func
latest_args = args
latest_kwargs = kwargs
return func(*args, **kwargs)
return wrapper
return decorate
def repeat():
if latest is None:
raise Exception("cannot call repeat without calling a function first")
return latest(*latest_args, **latest_kwargs)
@my_decorator()
def a(name = None):
return "Hello " + name
@my_decorator()
def b(say = "something"):
return "I will say " + say
print(a("Bob"))
print(repeat())
print(b())
print(repeat())
请注意,这可能不是最好的方法,这只是我想到的第一件事,本质上,每次调用装饰函数时,wrapper()都会被调用,这将保存函数和参数,并且然后,wrapper()调用函数。