Python2:arg后面的参数

2024-09-24 02:20:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我发现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在函数声明方面应该没有任何区别。我是对是错?你知道吗


Tags: 函数代码pyhttpsgithubcomlinepy3
1条回答
网友
1楼 · 发布于 2024-09-24 02:20:24

有意的,有记录的。见the Python 2 grammar

parameters: '(' [varargslist] ')'
varargslist: ((fpdef ['=' test] ',')*
              ('*' NAME [',' '**' NAME] | '**' NAME) |
              fpdef ['=' test] (',' fpdef ['=' test])* [','])

…所以,你可以有你的常规参数,逗号分隔,后跟*NAME*NAME, **NAME**NAME,这必须是你的参数列表的结尾。你知道吗

您还可以看到Python 2 tutorial对kwargs的描述:

When a final formal parameter of the form **name is present, [...]

…添加了强调;在Python2中,kwargs必须是列表中的最后一个参数。你知道吗


python3.0引入了PEP 3102,它添加了可以跟随vararg列表的仅关键字参数;这就是示例代码所使用的。你知道吗

相关问题 更多 >