def foo():
pass
def bar():
print \'good bay\'
two function like blow and now i want to run bar function after foo run finish
is th
Why not:
foo()
bar()
?
In case you want to have some general way to do it, you can try:
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():
....
This way bar is always run after foo is executed.
This is what decorators are for. This decorator, used on foo
with bar
as an argument will will run bar
after foo
and still return foo
s result. It will work on functions with any number of arguments.
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()
Edit: Added error handling. Thanks @Björn