我不理解下面的例子,假设我有这些函数:

# 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)是包含键-值对的单个变量.

"关键字参数"是键值方法参数.

在函数调用期间,任何字典都可以通过在其前面加**来解包为关键字参数.

Python相关问答推荐

元素不可交互,即使元素在浏览器的视图中

如何使用 Lambda 赋予 HTTP API 或 REST API 不更新的能力?

总结一个dict中有多少字段是空的或不存在的

将到今年年底的剩余时间添加到今天的日期

对流水线中的同一个估计器使用不同的特征

如何根据 Pandas 中的索引级别设置行值?

使用 Selenium 提取/保存元素的文本和图像

stemmer 和 lemmatizer 似乎都不能很好地工作,我该怎么办?

将 NRRD 文件转换为 JPG

删除满足条件的列表中的列表

如何为 ManyToMany 字段添加排序?

基于布尔值 pandas df 的高亮元素

带有Pandas 的ValueError应用函数返回可变形状的输出

使用groupby后如何获取数据框中的最小索引

Pandas Mapping:基于树形结构添加后缀

Python pandas:来自 get_dummies 的动态连接

从嵌套 for 循环到字典理解?

根据条件递归地向嵌套字典添加键

带有 APIRouter 插件系统的 FastAPI 无法正常工作

Pandas .title() 当字符串有一个's