Python2:*argv之后的参数
我发现py2和py3之间有奇怪的区别 请参阅以下代码: 当我尝试在py2中使用此方法导入类时:Python2:*argv之后的参数,python,python-2.7,Python,Python 2.7,我发现py2和py3之间有奇怪的区别 请参阅以下代码: 当我尝试在py2中使用此方法导入类时: from trace import EventTracer3 Traceback (most recent call last): File "<stdin>", line 1, in <module> File "trace.py", line 101 def trace(self, event, *argv, frame=None): SyntaxErro
from trace import EventTracer3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "trace.py", line 101
def trace(self, event, *argv, frame=None):
SyntaxError: invalid syntax
从跟踪导入EventTracer3
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“trace.py”,第101行
def跟踪(自身、事件、*argv、帧=无):
SyntaxError:无效语法
但是对于py3来说这是可以的。
我在py2中找不到函数的参数有任何限制。。。
这实际上有点奇怪,因为据我所知,python2和python3在函数声明方面不应该有任何区别。我错了还是对了?故意的,有记录的。见: …因此,您可以使用常规参数,逗号分隔,后跟
*NAME
、*NAME、**NAME
或**NAME
——这必须是参数列表的结尾
您还可以查看的对kwargs的描述:
当存在**名称形式的final形式参数时,[…]
……增加了重点;在Python 2中,kwargs必须是列表中的最后一个参数
引入Python3.0,它添加了只能跟随vararg列表的关键字参数;这就是您的示例代码所使用的。如果我没有弄错的话,这是PEP 3102。谢谢您的解释。这对我的需要有点不方便。我想我需要做一些变通来让它在py2上工作
parameters: '(' [varargslist] ')'
varargslist: ((fpdef ['=' test] ',')*
('*' NAME [',' '**' NAME] | '**' NAME) |
fpdef ['=' test] (',' fpdef ['=' test])* [','])