有没有一种方法可以嵌入参数,并将kwargs传递给函数?
例如:
机器人文件
Testcase1
do something "value" extra_args=bla
Python库
@keyword('do something "${value}"')
def do_something(self, value, **kwargs):
print(value)
print(kwargs)
尽管上述方法不起作用。我也试过了
Testcase1
do something "value" extra_args=bla
也是
*** Variables ***
&{DICT} extra_args=bla
Testcase1
do something "value" &{DICT}
还有许多其他的组合。我在Robotframework中发现了pull请求,其中添加了此限制,但我确信其他库编写人员一定想要此功能。
谢谢
在机器人框架留档中,这在自由关键字参数(**kwargs)一节中描述。
Robot Framework 2.8使用Python的**kwargs语法添加了对免费关键字参数的支持。如何在测试数据中使用语法将在“创建测试用例”下的“自由关键字参数”部分中讨论。在本节中,我们将了解如何在自定义测试库中实际使用它。
这是Python示例:
def various_args(arg, *varargs, **kwargs):
print 'arg:', arg
for value in varargs:
print 'vararg:', value
for name, value in sorted(kwargs.items()):
print 'kwarg:', name, value
和相应的机器人文件:
*** Test Cases ***
Positional
Various Args hello world # Logs 'arg: hello' and 'vararg: world'.
Named
Various Args arg=value # Logs 'arg: value'.
Kwargs
Various Args a=1 b=2 c=3 # Logs 'kwarg: a 1', 'kwarg: b 2' and 'kwarg: c 3'.
Various Args c=3 a=1 b=2 # Same as above. Order does not matter.
Positional and kwargs
Various Args 1 2 kw=3 # Logs 'arg: 1', 'vararg: 2' and 'kwarg: kw 3'.
Named and kwargs
Various Args arg=value hello=world # Logs 'arg: value' and 'kwarg: hello world'.
Various Args hello=world arg=value # Same as above. Order does not matter.
简短回答-不,这是不允许的;文档链接,基本语法中的最后一段。
考虑一下,我可以看出这种限制来自哪里——如果kwargs在带有嵌入参数的关键字中得到支持,解析器将会非常困难,主要是在两个方面:
在此示例代码中:
My keyword @{kwarg} varies
Pass Execution
,当这样叫时:
My keyword was called varies
,参数应该是什么?一个值的参数被称为
,或者两个值的参数被称为
,而的参数被称为
?
另一个示例关键字定义:
My keyword @{kwarg}
Pass Execution
My keyword ${normal} argument
Pass Execution
,当这样叫时:
My keyword one argument
,解析器应该匹配这两个关键字中的哪一个?
正如你所看到的,kwargs在嵌入语法中会导致问题,这可能只是冰山一角。
附带说明——尽管我个人觉得嵌入参数的关键词非常酷——你可以有看起来像简单英语的电话!几乎没有其他语言给你这种可能性!,在实践中,我发现它们是有限的,现在试着避免它们。
两个原因-你不能在将来改变这样的关键字的签名,例如添加可选参数(或kwargs;))。第二个是参数总是作为字符串对象传递——所以如果它处理另一种类型,你必须在关键字中转换它们,忘记传递复杂的对象类型。
问题内容: 在 Python的2.x的 (我用2.7),这是使用默认参数用正确的方式和? 我已经找到了与此主题相关的SO问题,但这是针对 Python 3的 : 使用 args,* kwargs和可选的/默认参数调用Python函数 在那里,他们说此方法有效: 在2.7中,结果为。有没有推荐的方法来定义这种功能? 我以这种方式工作,但我猜有更好的解决方案。 问题答案: 只需将默认参数放在: 现在,
问题内容: 我不理解以下示例,可以说我具有以下功能: 为什么#1是正确的解决方案,而#2是错误的解决方案?基本上是一个字典,所以如果我想将参数传递给openX,我认为正确的方法是没有并给出字典。但是python显然不喜欢第二个,并告诉我我给了3个而不是2个参数。那么,这背后的原因是什么? 问题答案: 在第二个示例中,您提供3个参数:文件名,模式和字典()。但是Python期望:2个形式参数和关键字
问题 你有一个函数或方法,它使用*args和**kwargs作为参数,这样使得它比较通用, 但有时候你想检查传递进来的参数是不是某个你想要的类型。 解决方案 对任何涉及到操作函数调用签名的问题,你都应该使用 inspect 模块中的签名特性。 我们最主要关注两个类:Signature 和 Parameter 。下面是一个创建函数前面的交互例子: >>> from inspect import Si
*args 和 **kwargs 都允许将可变数量的参数传递给函数。当不确定要在函数中传递的参数数量时,将使用它们。 *args 允许你将可变数量的参数传递给函数。 def addNumbers(*numbers): sum = 0 for number in numbers: sum = sum + number print("Sum: "
rank ▲ ✰ vote url 55 392 282 480 url *args和 **kwargs 我对*args和**kwargs的概念有点不理解. 到目前位置我了解到: *args = 参数列表-作为可选参数 **kwargs = 字典-参数的关键字作为键,它们的值作为字典的值. ?? 说实话我不裂解这对编程来说有什么用?(我知道它,但是对他不了解.) 或许: 我想把字典或者列表当做参数
在Spring,嵌入式ldap如何与sping-ldap模板一起使用。目前,我的配置是- ContextSource值在属性文件中可用。现在我想使用嵌入式ldap- 我将在LdapContextSource值中指定的默认端口是什么。
我正在Metabase上创建一个仪表板,以便将其嵌入到应用程序中。这个仪表板有两个问题,其中一个是使用元数据库查询生成器(AOV)创建的,另一个是使用SQL(GMV)创建的。当我在问题上设置brand_id参数时,我得到一个错误,说明在运行查询时发生了错误,但是AOV问题的一切工作都很好。你能帮帮我吗? 我得到的错误是: 缺少ID:{…}Values:Object{Values:(60)[…],H
问题内容: 我们有一个基于Java的系统,该系统从数据库中读取数据,将各个数据字段与预设标签合并,然后将结果转换为with 。 在格式,它看起来是这样的: 现在,我正在寻找一种允许某些字段包含静态 HTML格式 内容的方法。此内容将通过我们的支持HTML编辑器生成(沿着线的东西,等),或者从外部粘贴。 我的计划是遵循此JavaWorld文章的配方: 用于将HTML格式的字符串转换为正确的XHTML