使用**kwargs时关键字参数有多个值

2024-06-26 03:45:33 发布

您现在位置:Python中文网/ 问答频道 /正文

函数的搜索定义为

def _mget_search(query, with_scores=False, count=False, record_term=True,
**kwargs): 

此函数使用关键字参数调用。在

^{pr2}$

函数参数搜索包含as

{'count': False, 'min_score': 20, 'end': 49, 'with_scores': False, 'start': 0, 'query': u'ouuuuu', 'max_score': inf, 'record_term': True}

我得到了这个错误-

_mget_search() got multiple values for keyword argument 'query'

我无法理解为什么会发生这种情况,以及如何纠正它。在


Tags: 函数falsetruesearch定义defcountwith
3条回答

**kwargs允许您将关键字可变长度的参数传递给函数。如果要处理函数中的命名参数,应该使用**kwargs。下面是一个示例,可以让您使用它:

def greet_me(**kwargs):
    if kwargs is not None:
        for key, value in kwargs.iteritems():
            print "%s == %s" %(key,value)

>>> greet_me(name="yasoob")
name == yasoob

我认为问题是因为query被定义为一个位置参数,所以当你用**传递的字典被解包时,第一个条目(不管它的名字)被用于查询,然后查询也会出现在字典中,因此query有多个值。在

尝试通过将查询设置为命名参数来修复:

def _mget_search(query='', with_scores=False, count=False, record_term=True, **kwargs):

或者,在传递查询时不要在字典中包含查询。在

这是因为你正在解开你试图传递的论点。尝试使用:

_mget_search(search_kwargs)

编辑

让我们更深入地研究这个问题。我们将定义两个函数,看看它们在传递各种参数时的行为。在

^{pr2}$

在第3次调用中,我们分别传递了3个参数,这与我们使用第7个调用时调用未打包的列表相同。与调用fun2时的情况进行比较。在

相关问题 更多 >