Issue #19611: handle implicit parameters in inspect.signature

inspect.signature now reports the implicit ``.0`` parameters generated by
the compiler for comprehension and generator expression scopes as if they
were positional-only parameters called ``implicit0``.

Patch by Jelle Zijlstra.
This commit is contained in:
Nick Coghlan 2016-06-04 14:40:03 -07:00
parent d62548afed
commit b4b966ece2
5 changed files with 56 additions and 0 deletions

View file

@ -2396,6 +2396,20 @@ class Parameter:
if not isinstance(name, str):
raise TypeError("name must be a str, not a {!r}".format(name))
if name[0] == '.' and name[1:].isdigit():
# These are implicit arguments generated by comprehensions. In
# order to provide a friendlier interface to users, we recast
# their name as "implicitN" and treat them as positional-only.
# See issue 19611.
if kind != _POSITIONAL_OR_KEYWORD:
raise ValueError(
'implicit arguments must be passed in as {}'.format(
_POSITIONAL_OR_KEYWORD
)
)
self._kind = _POSITIONAL_ONLY
name = 'implicit{}'.format(name[1:])
if not name.isidentifier():
raise ValueError('{!r} is not a valid parameter name'.format(name))