有没有方法在函数运行结束后运行另一个函数?
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
为什么不这样做:
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():
....
这样的话,bar总是在foo执行完之后运行。
4
这就是装饰器的用途。这个装饰器用在foo
上,传入bar
作为参数,它会在foo
执行完后再运行bar
,而且还会返回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