小编典典

使用 **kwargs 将 **kwargs 参数传递给另一个函数

all

我不明白下面的例子,假设我有这些功能:

# python likes
def save(filename, data, **kwargs):
    fo = openX(filename, "w", **kwargs) # <- #1
    fo.write(data)
    fo.close()
# python doesnt like
def save2(filename, data, **kwargs):
    fo = openX(filename, "w", kwargs) # <- #2
    fo.write(data)
    fo.close()

def openX(filename, mode, **kwargs):
    #doing something fancy and returning a file object

为什么#1 是正确的解决方案而#2
是错误的解决方案?**kwargs基本上是一个字典,所以如果我想将论点传递给openX,我认为正确的方法是没有**并且只给出字典。但是 Python
显然不喜欢第二个,并告诉我我给出了 3 而不是 2 个参数。

那么这背后的原因是什么?


阅读 65

收藏
2022-06-11

共1个答案

小编典典

在第二个示例中,您提供了 3 个参数:文件名、模式和字典 ( kwargs)。但 Python 期望:2 个形式参数加上关键字参数。

通过在字典前面加上’**’,你可以将字典解压缩kwargs为关键字参数。

字典(类型dict)是包含键值对的单个变量。

“关键字参数”是键值方法参数。

任何字典都可以通过**在函数调用期间添加前缀来解压缩为关键字参数。

2022-06-11