问题标签 [keyword-argument]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
6408 浏览

python - 在 Python 中,是什么决定了遍历 kwargs 时的顺序?

在 python 中,我编写了这个函数来教自己如何**kwargs在 Python 中工作:

然后我用

这是我的 Python 解释器打印的输出:

为什么 for 循环在 a2 之前打印 a3 的值,即使我先将 a2 输入到我的函数中?

0 投票
6 回答
16556 浏览

python - argparse 参数顺序

我有一个小问题。

argparse用来解析我的论点,而且效果很好。

要获得参数,我会:

但问题p_args是我不知道如何让这些参数按它们在命令行中的位置排序,因为它是一个字典。

那么有没有可能按照命令行中的顺序将参数放在元组/列表/有序字典中?

0 投票
3 回答
769 浏览

python - Python - 入站出站参数

我在 Expert Python Programming 中读到过这个极端案例。检查此代码:

我不清楚为什么f最后一次调用时(在保存其返回值之后),而不是分配 arg 空字典(因为它是在没有参数的情况下调用的),而是保留旧的引用。

这本书是这样说的:“如果在参数中创建了一个对象,那么如果函数返回该对象,则参数引用仍然有效”。

我明白“这就是它的工作方式”,但为什么会这样呢?

0 投票
3 回答
972 浏览

python - 将字典发送到不接受 **kwargs 的函数?

我最近才开始了解 **kwargs 的神奇之处,但我遇到了一个绊脚石。有没有办法将字典的关键字发送到不接受关键字参数的函数?考虑以下简单设置:

我使用了一些外部代码,它们以以下样式进行接口:

问题是:“externalCode”不接受 **kwargs,那么有没有一种聪明的方法可以将字典信息变成可接受的形式?

此外,不同的函数将 parameterDict 的不同子集作为参数。因此,函数“two”可能接受“first”和“second”参数,它拒绝“third”。“三”接受所有三个。

- - - - - - - - - - - - - - - - - - - 编辑 - - - - - - -------------------------

人们已经正确地评论说上面的代码不会失败——所以我已经找到了我的问题,我不确定它是否值得重新发布。我正在做这样的事情:

而且,显然解决方法是在定义时明确包含 hairColor: printHair(hairColor, **kwargs) 首先。

0 投票
3 回答
255 浏览

python - 方法1可以将kwargs传递给方法2吗?

我希望 kwargs 在 method2 中具有与传入 method1 的内容相同的确切内容。在这种情况下,“foo”被传递到方法 1,但我想传递任意值并在方法 1 和方法 2 中的 kwargs 中查看它们。我需要对我如何调用 method2 做一些不同的事情吗?

输出:

期望的输出:

如果我需要澄清我在问什么,或者如果这是不可能的,请告诉我。

0 投票
1 回答
683 浏览

python - WTForms 错误:“object.__new__() 没有参数”,设置额外的 kwargs 时

根据我所见,我猜你应该将 kwargs 传递给 WTForms 小部件,它会将它们作为属性添加到标签中,对吧?像这样?

好吧,我在控制台中得到的内容如下:

经过几个小时的研究和恐惧,我不太确定如何解决这个错误。TextArea 小部件源代码如下:

rows并且cols应该在渲染时作为关键字参数传递。

似乎它应该很简单。

我在 App Engine 中使用 Python 2.7 以及 Flask,如果有帮助的话。截至撰写本文时,我正在使用最新版本的 WTForms 1.0.1。

提前致谢!

0 投票
4 回答
47477 浏览

python - 使用 *args、**kwargs 和可选/默认参数调用 Python 函数

在 Python 中,我可以如下定义一个函数:

在这种情况下,我可以调用func

我还可以将函数定义为:

可以称为

最后,我可以结合这两种形式

但是,不起作用的是调用:

我最初的想法是,这可能是因为一个函数

可以称为

所以这会引入一些歧义,是否应该将 3 打包到argsorkwargs中。但是,使用 Python 3,可以指定仅关键字参数:

有了这个,似乎没有语法歧义:

但是,这仍然会带来语法错误(使用 Python3.2 测试)。我失踪有什么原因吗?而且,有没有办法获得我上面描述的行为(使用默认参数)——我知道我可以通过操纵函数内部的字典*args来模拟这种行为。kwargs

0 投票
1 回答
601 浏览

python - Python/Cherrypy 处理从 Kwargs 上传的文件。实例类型不可索引。尝试转储 FieldStorage 数据

我正在运行cherrypy和一个接收文件的模块,我想将数据转储到磁盘。我不想使用cherrypy暴露并从我的主cherrypy应用程序中获取文件,而是想自己处理它。我已经能够做到这一点

print kwargs['image']

并将其转储到控制台

FieldStorage('image', 'Diagram1.jpeg', *raw image data*)

如何访问那里的三个变量并在我的程序中使用它们?

如果我尝试索引它们,它会说,实例类型不可索引。

我能够摆脱这个print kwargs['image'].__dict__

但它似乎都没有,因为它说TypeError: not indexable

0 投票
1 回答
891 浏览

macros - 球拍宏可以接受关键字参数吗?

我想在 Racket 中创建一个可以接受关键字参数的语法形式,就像某些函数一样。

将其简化为一个简单的示例后,我尝试编写:

这样以下将起作用:

不幸的是,Racket 将此称为“错误语法”,因此显然这种尝试是不正确的。

这可以做到吗?

0 投票
2 回答
5777 浏览

python - 为什么 ** 在函数调用中不解包 kwargs?

这是困扰我一段时间的事情:

我假设target='test'在底部的 aFunc 调用中会以 kwargs 结尾(确实如此),并且我还假设 ** 会在函数调用中解包 kwargs,因此 target 将作为关键字参数存在于 aFunc 中。它没有。我知道它是以字典的形式出现的,但我需要在参数列表中解压该字典。这可能吗?简而言之,有没有办法让 *args 和 **kwargs 消失并让实际的 args 和 kwargs 进入通话?

编辑:我整理了一个案例,其中 *args 和 **kwargs 的解包可能会有所帮助:

假设我有一个打印列表的函数:

我希望能够不传递任何列表并提供默认列表:

现在我想用一个列表中继器变得更复杂一点:

这很好用。但现在我想要变量重复:

现在你可以说:

它将生成默认列表并重复 5 次。

当然,这会失败,因为 wrapper 无法处理 times 参数。我当然可以这样做:

但是我总是必须这样做:

也许在某些情况下我想强制提供一个值,所以非关键字 arg 是有意义的。

当我去年第一次遇到这样的问题时,我认为一个简单的解决方案是删除对包装器的要求:

但是,这行不通。这就是为什么我想让 args 和 kwargs 真正扩展,或者我想有办法进行扩展。然后,无论我提供什么 args 和 kwargs,它们实际上都会填写参数,而不是列表和字典。包装器中的文档将解释要求。如果传入inputList,它实际上会进入,并且从包装器回调repeatList 中的inputList 将是有效的。如果您没有传入 inputList,它会在对 repeatList 的回调中使用默认列表创建它。如果您的函数不在乎,但使用了 *kwargs,它会优雅地接受它而不会出现问题。

如果以上任何一个错误(超出一般概念),我们深表歉意。我在这里打出来的,未经测试,已经很晚了。