Python func(*args,**kwargs,x)抛出无效语法

Python func(*args,**kwargs,x)抛出无效语法,python,Python,我又把自己研究到一个角落里 def superfunction(*args, **kwargs, k): ^ SyntaxError: invalid syntax 我在这里违反了什么规则?似乎你不应该把“常规”变量和*变量混在一起,但我找不到任何人来证实或否认这一点。我在某个地方读到(当然我现在找不到)某些类型的参数必须放在第一位,我相信关键字参数,这可能是我的问题的一部分,也可能不是我的问题。试试这个: def superf

我又把自己研究到一个角落里

def superfunction(*args, **kwargs, k):
                                 ^
SyntaxError: invalid syntax
我在这里违反了什么规则?似乎你不应该把“常规”变量和*变量混在一起,但我找不到任何人来证实或否认这一点。我在某个地方读到(当然我现在找不到)某些类型的参数必须放在第一位,我相信关键字参数,这可能是我的问题的一部分,也可能不是我的问题。

试试这个:

def superfunction(k, *args, **kwargs):
**kwargs
变量关键字参数必须是函数声明的最后一部分。倒数第二个是
*args
变量位置参数。(仅在Python3.x中,您还可以在
*args
**kwargs
之间使用仅关键字的参数,首先是位置参数-这是声明函数参数的正确方法。更多细节,请看一下这个


有关完整参考,请参阅或中的函数定义部分。

语法应如下所示:

def superfunction(k, *args, **kwargs):

首先给出所有的位置参数,然后是非关键字参数,然后是关键字参数。

所以它的未命名变量,命名变量,*,**我能让它工作的唯一顺序是def superfunction(k,n=2,*args,**kwargs):谢谢你让我走上正确的道路。后续:def superfunction(k,n=2,*args,**args2,**kwargs):具有多个*类型参数也会引发语法错误。我想您只允许使用一个参数?这对于Python3.x来说不太合适,因为在
*args
**kwargs
之间也可以使用关键字参数。但无论如何,在
**kwargs
之后不能有任何内容,也不能有多个
*args
或多个
**kwargs
。没错,只允许有一个。我用一个有用的链接编辑了我的答案。Python2.x和3.x之间关于错误原因的详细信息有点不同;请参阅教程部分和参考部分,了解您的相应版本的详细信息。但是简单地说,
**
参数后面不能出现任何内容;我不认为它对新手很友好……但我希望它至少比阅读参考文档容易一点。(这是Python3特有的。)除了错误地获取参数和参数之外……非关键字参数和位置参数是一样的,因此这是混淆和错误的。正确的顺序是:位置或关键字参数,然后可选地
*args
(或
*
,仅在Python3.x中),然后(仅在Python3.x中)只有关键字参数,然后
**kwargs
@abarnert-Ah!它是?几个月前我读过它,所以我似乎忘记了技术术语,因此弄错了。谢谢你指出这一点。