Python: 将执行语句作为函数参数传递
retVal = None
retries = 5
success = False
while retries > 0 and success == False:
try:
retVal = graph.put_event(**args)
success = True
except:
retries = retries-1
logging.info('Facebook put_event timed out. Retrying.')
return success, retVal
在上面的代码中,我怎么能把这一整段代码封装成一个函数,并且让任何命令(在这个例子中是 'graph.put_event(**args)')都可以作为参数传入,在函数内部执行呢?
2 个回答
3
这段代码的意思是……
首先,它定义了一个变量,变量就像一个盒子,用来存放数据。接着,它给这个盒子里放了一些值,这些值可以是数字、文字或者其他类型的数据。
然后,代码会执行一些操作,比如计算、比较或者改变这些值。最后,可能会有一些输出,显示结果给用户。
整体来说,这段代码的目的是为了处理一些信息,并根据这些信息做出相应的反应。
def do_event(evt, *args, **kwargs):
...
retVal = evt(*args, **kwargs)
...
5
直接回答你的问题:
def foo(func, *args, **kwargs):
retVal = None
retries = 5
success = False
while retries > 0 and success == False:
try:
retVal = func(*args, **kwargs)
success = True
except:
retries = retries-1
logging.info('Facebook put_event timed out. Retrying.')
return success, retVal
然后可以这样调用它:
s, r = foo(graph.put_event, arg1, arg2, kwarg1="hello", kwarg2="world")
顺便说一下,针对上面的任务,我会这样写:
class CustomException(Exception): pass
# Note: untested code...
def foo(func, *args, **kwargs):
retries = 5
while retries > 0:
try:
return func(*args, **kwargs)
except:
retries -= 1
# maybe sleep a short while
raise CustomException
# to be used as such
try:
rv = foo(graph.put_event, arg1, arg2, kwarg1="hello", kwarg2="world")
except CustomException:
# handle failure