首页 > 解决方案 > python有没有办法记住脚本中执行的最后一个函数,然后再次调用它?

问题描述

假设我有两个功能:

def a(name = None):
    return "Hello " + name

def b(say = "something"):
    return "I will say " + say

现在,这些功能的作用大多无关紧要。我只想知道是否有一种方法可以实现一个repeat()函数,该函数将重复a()或者b()取决于最后执行的函数。

先感谢您!

标签: python

解决方案


您可以使用装饰器来实现

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()调用该函数。


推荐阅读