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!它是?几个月前我读过它,所以我似乎忘记了技术术语,因此弄错了。谢谢你指出这一点。