我发现py2和py3之间存在奇怪的区别
请看一段代码: https://github.com/DoumanAsh/collectionScripts/blob/master/python/art/trace.py#L101
当我尝试在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):
SyntaxError: invalid syntax
但对于py3来说还可以。 py2中函数参数的任何限制都无法找到... 实际上有点奇怪,因为据我所知,在函数声明方面python2和python3之间应该没有任何区别。我错了还是对的?
答案 0 :(得分:3)
有意识,并记录在案。见the Python 2 grammar:
parameters: '(' [varargslist] ')'
varargslist: ((fpdef ['=' test] ',')*
('*' NAME [',' '**' NAME] | '**' NAME) |
fpdef ['=' test] (',' fpdef ['=' test])* [','])
...所以,您可以使用常规参数,以逗号分隔,后跟 *NAME
,*NAME, **NAME
或**NAME
- 必须是你的参数列表的结尾。
您还可以看到Python 2 tutorial对kwargs的描述:
当存在**名称形式的最终形式参数时,[...]
......强调增加;在Python 2中,kwargs必须是列表中的最后一个参数。
Python 3.0引入了PEP 3102,它添加了可以跟随vararg列表的仅限关键字的参数;这是您的示例代码使用的内容。