使用所有原始参数调用函数

时间:2013-12-28 16:15:34

标签: python

我遇到了程序中的一个问题,我不知道解决问题的方法是什么。我在下面的内容是尝试解释我想要完成的任务。

这个函数首先做的是尝试使用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

处理此类问题的正确方法是什么?

谢谢!

1 个答案:

答案 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)

位置参数abcargs get_fresh_tokens()参数中捕获,该参数将该列表重新应用为位置参数在致电func_to_call()时。

**kw参数捕获字典中的所有关键字参数,并且func_to_call()函数中的镜像语法将在传入时重新应用这些参数。