我不明白下面的例子,假设我有这些功能:
# 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 个参数。
那么这背后的原因是什么呢?
在第二个示例中,您提供 3 个参数:文件名、模式和字典 (kwargs
)。但 Python 期望:2 个形式参数加上关键字参数。
通过在字典前添加“**”前缀,您可以解压字典kwargs
到关键字参数。
字典(类型dict
) 是包含键值对的单个变量。
“关键字参数”是键值方法参数。
任何字典都可以通过在其前面加上前缀来解压缩为关键字参数**
在函数调用期间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)