如何在Python中返回带双星星/星号的**kwargs?

l7wslrjt  于 2023-02-10  发布在  Python
关注(0)|答案(3)|浏览(176)

假设我有以下函数:

def f(**kwargs):
    for key in kwargs.keys():
        print(key + ': ' + str(kwargs[key]))

def make_kwargs():
    # My example implementation here
    params = {'a' : 1, 'b' : 2}
    return params # Here is the part I don't know how to do

并且必须以以下方式调用这些函数:

f(make_kwargs())

但是,这将返回TypeError
TypeError:f()接受0个位置参数,但给出了1个
我试过:

return **params

但是语法是无效的。
假设我不能修改函数f()和调用它的方式(f(make_kwargs())),我唯一能修改的部分是如何实现make_kwargs(),我想知道是否有办法做到这一点?

egdjgwm8

egdjgwm81#

make_kwargs返回一个字典,所以你只需要传递一个字典给f,你需要将字典解压缩成关键字参数,如下所示:

f(**make_kwargs())
w6lpcovy

w6lpcovy2#

仍然可以打印这些值,但是在第二次调用时仍然会得到TypeError。

def f(**kwargs):
    for key in kwargs.keys():
        print(key + ': ' + str(kwargs[key]))

def make_kwargs():
    # My example implementation here
    params = {'a': 1, 'b': 2}
    return f(**params)

f(make_kwargs())
57hvy0tb

57hvy0tb3#

这可能有点晚了--但是这可以通过使用闭包重新定义f来完成:

def f(**kwargs):
    for key in kwargs.keys():
        print(key + ': ' + str(kwargs[key]))

def make_kwargs():
    params = {'a': 1, 'b': 2}
    return params

def with_kwargs(function):
    def wrapper(kwargs_as_dict):
        function(**kwargs_as_dict)
    return wrapper

# redefine f
f = with_kwargs(f)

# now this works
f(make_kwargs())

相关问题