当前位置: 首页 > 面试题库 >

通过** kwargs将** kwargs参数传递给另一个函数

齐英耀
2023-03-14
问题内容

我不理解以下示例,可以说我具有以下功能:

# 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为关键字参数。

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

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

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



 类似资料:
  • 问题内容: 我尝试了以下失败的尝试: 在函数a中,我可以使用arguments关键字来访问参数数组,而在函数b中,这些参数将丢失。有没有办法像我尝试的那样将参数传递给另一个javascript函数? 问题答案: 用于对in函数具有相同的访问权,如下所示:

  • 问题内容: 我想将传递给function()的所有参数作为参数传递给内部的另一个function(), 这可以在被调用过程中完成并将它们传递给,但是还有另一种方法吗? 本来 但是如果我的func1签名是 我如何将它们全部发送到func2,而不使用 有没有一种方法像在javascript中? 问题答案: 显式比隐式更好, 但是如果您真的不想键入一些字符,请执行以下操作: 都是局部变量,因此您不能在调

  • 所以,我试图用discord js和sqlite3做一件事,但在过去的几个小时里,我一直在讨论这个问题,我仍然不知道如何解决它。 因此,我试图获取仅在中可用的数据,但我不知道如何将其传递出去,以便返回预期值。我已经尝试过使用全局变量,把它放在更大的范围内,但我仍然不知道如何做到这一点。 对不起,如果我弄糊涂了,我不习惯一直问问题。 编辑:应该说我正在使用NPMSqlite3模块。https://w

  • 本文向大家介绍Python函数中*args和**kwargs来传递变长参数的用法,包括了Python函数中*args和**kwargs来传递变长参数的用法的使用技巧和注意事项,需要的朋友参考一下 单星号形式(*args)用来传递非命名键可变参数列表。双星号形式(**kwargs)用来传递键值可变参数列表。 下面的例子,传递了一个固定位置参数和两个变长参数。 结果如下: 这个例子用来展示键值对形式的

  • 问题内容: 是否可以通过某种方式将一个函数的范围传递给另一个函数? 例如, 我宁愿直接访问变量,即,不使用类似或的任何东西,而只是直接使用或。 问题答案: 真正访问函数私有范围的唯一方法是在函数内部声明,这样就形成了一个闭包,允许隐式访问变量。 这是您的一些选择。 直接访问 在内部声明。 如果您不想在中使用,则可以将它们都放在更大的容器范围内: 这些是您可以直接使用的变量而无需任何额外的代码来移动

  • 问题内容: 我是ajax和回调函数的新手,如果我弄错了所有概念,请原谅我。 问题: 我可以将 回调 函数作为参数发送给将执行该回调的另一个函数吗? 问题答案: 对。函数引用与任何其他对象引用一样,您可以将它们传递到您的内心。 这是一个更具体的示例: 您还可以传递以下参数: