如何将任意数量的参数传递给Python(Facepy库)中的函数?

时间:2013-11-06 23:42:57

标签: python python-2.7 kwargs facepy

我正在尝试向函数传递任意数量的参数,并且我不断收到错误,并且不太确定我哪里出错了。这是我第一次尝试使用** kwargs。

更具体地说,我正在尝试使用Facepy库从Facebook的Graph API获取数据。根据文档(https://facepy.readthedocs.org/en/latest/usage/graph-api.html),get方法应该接受可选参数,如“since”,“until”等。因为我只想在任何给定的查询上传递一些这些参数,似乎是使用** kwargs的理想时间。

首先,我创建一个包装Facepy库的函数:

def graph_retriever(object_id, metric_url, **kwargs): 
    #optional args that I want to pass include since, until, and summary
    graph = facepy.GraphAPI(access_token)
    retries = 3 # An integer describing how many times the request may be retried.
    object_data = graph.get('%s/%s' % (object_id, metric_url), False, retries, **kwargs)
    return object_data

以下是我用不同参数调用函数的两个例子:

for since, until in day_segmenter(start, end): # loop through the date range
    raw_post_data = graph_retriever(str(page), 'posts', {'since': since, 'until': until})

post_dict['comment_count'] = graph_retriever(post_id, 'comments', {'summary':1})['summary']['total_count']

但是,当我尝试运行它时,我收到以下错误:

Traceback (most recent call last): raw_post_data = graph_retriever(str(page), 'posts', {'since': since, 'until': until}) TypeError: graph_retriever() takes exactly 2 arguments (3 given)

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您可以使用**

解压缩字典作为kwargs
graph_retriever(str(page), 'posts', **{'since': since, 'until': until})

编辑1:

kwargs实际上必须作为关键词args传递,即该函数应该被称为

graph_retriever(str(page), 'posts', since= since, until= until)

请参阅此处了解文档Python Kwargs