在函数运行完成后有没有办法运行其他函数?

时间:2011-08-11 10:21:08

标签: python

def foo():
    pass

def bar():
    print 'good bay'
两个功能就像打击一样 现在我想在foo运行完成后运行bar函数

是否有类使用__del__的方法? 正如我在课堂上的方法所知,我可以使用__del__,如下所示:

 class A(object):
    def __init__(self):
        pass
    def __del__(self):
        bar()

但我无法使用foo.__del__ 还有其他方法吗?

2 个答案:

答案 0 :(得分:3)

这就是装饰者的用途。此foo上使用bar作为参数的装饰器将在bar之后运行foo并仍然返回foo的结果。它将适用于具有任意数量参数的函数。

def run_before(lastfunc, *args1, **kwargs1):
    def run(func):
        def wrapped_func(*args, **kwargs):
            try:
                result = func(*args, **kwargs)
            except:
                result = None
            finally:
                lastfunc(*args1, **kwargs1)
                return result
        return wrapped_func
    return run

def bar():
    print 'goodby'

@run_before(bar)
def foo():
    print "hello"

foo()

编辑:添加了错误处理。谢谢@Björn

答案 1 :(得分:0)

为什么不:

foo()
bar()

如果您想要一些通用的方法,可以尝试:

def run_after(f_after):
    def wrapper(f):
        def wrapped(*args, **kwargs):
            ret = f(*args, **kwargs)
            f_after()
            return ret
        return wrapped
    return wrapper

@run_after(bar)
def foo():
    ....

这种方式总是在foo执行后运行。