我有一个函数,其签名如下:
def func(**kwargs):
该函数的用户将使用零或一个关键字参数调用该函数。如果他传递一个参数,则名称将为foo_id
,bar_id
,baz_id
等,但我不知道他将使用的确切名称。传递的参数的值将是一些整数。我仍然想使用该参数的值并使用它。
目前,我正在这样做,但是我想知道是否会有更清洁的方法来实现这一目标:
def func(**kwargs):
if kwargs:
target_id = list(kwargs.values())[0]
else:
target_id = None
# use target_id here, no worries if it's None
我正在使用Python 3.8,所以向后兼容不是问题。
我们在这里
def func(**kwargs):
target_id = next(iter(kwargs.values()), None)
print(target_id)
func(name_id='name')
func(value_id='value')
func(test_id='test')
func()
输出
python test.py
name
value
test
None
由于字典只有一项,而且您不需要将其保留在字典中,因此最干净的方法是使用dict.popitem
方法。这将同时返回参数名称及其值对。
dict.popitem
由于调用方最多应提供一个参数,所以建议在调用更多参数时显式引发错误:
def func(**kwarg):
if kwarg:
name, value = kwarg.popitem()
# ...
else:
# ...