Pythonic方式来获取第一个通过的kwarg,却不知道其名称? [重复]

问题描述 投票:2回答:2

我有一个函数,其签名如下:

def func(**kwargs):

该函数的用户将使用零或一个关键字参数调用该函数。如果他传递一个参数,则名称将为foo_idbar_idbaz_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,所以向后兼容不是问题。

python python-3.x kwargs keyword-argument
2个回答
4
投票

我们在这里

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

0
投票

由于字典只有一项,而且您不需要将其保留在字典中,因此最干净的方法是使用dict.popitem方法。这将同时返回参数名称及其值对。

dict.popitem

由于调用方最多应提供一个参数,所以建议在调用更多参数时显式引发错误:

def func(**kwarg):
    if kwarg:
        name, value = kwarg.popitem()
        # ...
    else:
        # ...
© www.soinside.com 2019 - 2024. All rights reserved.