在python中,我可以定义一个函数,如下所示:
def func(kw1=None,kw2=None,**kwargs):
...
在这种情况下,我可以将func称为:
func(kw1=3,kw2=4,who_knows_if_this_will_be_used=7,more_kwargs=Ellipsis)
我还可以将函数定义为:
def func(arg1,arg2,*args):
...
可以称为
func(3,4,additional,arguments,go,here,Ellipsis)
最后,我可以结合两种形式
def func(arg1,arg2,*args,**kwargs):
...
但是,不起作用的是调用:
func(arg1,arg2,*args,kw1=None,kw2=None,**kwargs): #SYNTAX ERROR (in python 2 only, apparently this works in python 3)
...
我最初的想法是,这可能是因为一个函数
def func(arg1,arg2,*args,kw1=None):
...
可以称为
func(1,2,3) #kw1 will be assigned 3
因此,这将在将3打包到args还是kwargs中引入一些歧义。但是,在python 3中,可以指定仅关键字参数:
def func(a,b,*,kw=None): #can be called as func(1,2), func(1,2,kw=3), but NOT func(1,2,3)
...
这样看来,在以下方面似乎没有语法歧义:
def func(a,b,*args,*,kw1=None,**kwargs):
...
但是,这仍然会引发语法错误(已通过Python3.2测试)。有没有我想念的原因?并且,有没有一种方法可以得到我上面描述的行为(具有带默认参数的*
args)-我知道我可以通过操纵函数中的kwargs字典来模拟这种行为。
您 可以 在Python 3中做到这一点。
def func(a,b,*args,kw1=None,**kwargs):
*
仅当您要指定仅关键字参数 而不使用 接受可变数量的位置参数时,才使用裸露*args
。您不用两个*
。
引用语法,在Python
2中
,您有
parameter_list ::= (defparameter ",")*
( "*" identifier [, "**" identifier]
| "**" identifier
| defparameter [","] )
而在Python
3中
,
parameter_list ::= (defparameter ",")*
( "*" [parameter] ("," defparameter)*
[, "**" parameter]
| "**" parameter
| defparameter [","] )
其中包括在参数之后提供其他参数的规定*
。
更新:
最新的Python
3文档在这里。
问题内容: 在 Python的2.x的 (我用2.7),这是使用默认参数用正确的方式和? 我已经找到了与此主题相关的SO问题,但这是针对 Python 3的 : 使用 args,* kwargs和可选的/默认参数调用Python函数 在那里,他们说此方法有效: 在2.7中,结果为。有没有推荐的方法来定义这种功能? 我以这种方式工作,但我猜有更好的解决方案。 问题答案: 只需将默认参数放在: 现在,
*args 和 **kwargs 都允许将可变数量的参数传递给函数。当不确定要在函数中传递的参数数量时,将使用它们。 *args 允许你将可变数量的参数传递给函数。 def addNumbers(*numbers): sum = 0 for number in numbers: sum = sum + number print("Sum: "
问题内容: Python-使用args和*kwargs[副本] 问题答案: 1650 语法为和。名称和仅是约定,但没有使用它们的硬性要求。 你会使用,当你确定不是多少个参数可能会被传递给你的函数,也就是说,它允许你传递的参数任意数量给你的函数。例如: 同样,允许你处理尚未预先定义的命名参数: 你也可以将它们与命名参数一起使用。显式参数首先获取值,然后将其他所有值传递给argsand *kwargs
本文向大家介绍Python函数中*args和**kwargs来传递变长参数的用法,包括了Python函数中*args和**kwargs来传递变长参数的用法的使用技巧和注意事项,需要的朋友参考一下 单星号形式(*args)用来传递非命名键可变参数列表。双星号形式(**kwargs)用来传递键值可变参数列表。 下面的例子,传递了一个固定位置参数和两个变长参数。 结果如下: 这个例子用来展示键值对形式的
问题内容: 是否可以为可选的通用参数提供默认值? 我正在尝试做这样的事情: 但我说错了 这只是我试图做的不可能的事吗? 问题答案: 用您完成的方式是不可能的。仅考虑上述代码,什么是类型?就像它说的那样,编译器无法弄清楚(我也不能,因为数据不存在,我也不能。) 特定问题的解决方案是重载而不是使用默认值: 但这引发了您在这里做什么的问题。您会认为应该如此。否则,您在做什么?如果不诉诸(您应该强烈避免)
当我将firstThing(第一件事)设置为default(默认值)时,如果没有默认值nil(默认值),这将起作用,我会得到一个错误,即调用函数时缺少参数。 通过键入Int 我认为它使它成为可选的,默认值为零,对吗?如果是这样,为什么没有=nil它就不能工作?