我遇到了程序中的一个问题,我不知道解决问题的方法是什么。我在下面的内容是尝试解释我想要完成的任务。
这个函数首先做的是尝试使用accesstoken获取一些信息,如果令牌过期,它会调用另一个函数来获取新的令牌。在这个阶段,我希望它用新令牌重新运行父函数(带有所有正确的参数)。这就是我下面的内容,我确信它看起来很破旧。
def do_something(accesstoken, a, b, c):
print "I am working ..."
r = requests.get(url + accesstoken)
if r.status_code != 200:
get_fresh_tokens(do_something)
# call this function again
else:
print "voila!"
def get_fresh_tokens(func_to_call):
# gets new token called accesstoken
func_to_call(new_accesstoken) # params a, b, c are lost
处理此类问题的正确方法是什么?
谢谢!
答案 0 :(得分:2)
您将参数作为额外参数传递:
def get_fresh_tokens(func_to_call, *args, **kw):
# gets new token called accesstoken
func_to_call(new_accesstoken, *args, **kw)
并使用它:
get_fresh_tokens(do_something, a, b, c)
位置参数a
,b
和c
在args
get_fresh_tokens()
参数中捕获,该参数将该列表重新应用为位置参数在致电func_to_call()
时。
**kw
参数捕获字典中的所有关键字参数,并且func_to_call()
函数中的镜像语法将在传入时重新应用这些参数。