我不明白下面的例子,假设我有这些功能:
# 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 个参数。
**kwargs
**
那么这背后的原因是什么?
在第二个示例中,您提供了 3 个参数:文件名、模式和字典 ( kwargs)。但 Python 期望:2 个形式参数加上关键字参数。
kwargs
通过在字典前面加上’**’,你可以将字典解压缩kwargs为关键字参数。
字典(类型dict)是包含键值对的单个变量。
dict
“关键字参数”是键值方法参数。
任何字典都可以通过**在函数调用期间添加前缀来解压缩为关键字参数。