Issue 36744: functools.singledispatch: Shouldn't require a positional argument if there is only one keyword argument (original) (raw)

Issue36744

Created on 2019-04-28 01:21 by KevinG, last changed 2022-04-11 14:59 by admin.

Messages (4)
msg341016 - (view) Author: Kevin (KevinG) Date: 2019-04-28 01:21
Passing a single argument as a keyword argument to a function decorated with @functools.singledispatch results in an error: $ python Python 3.7.2 (default, Feb 12 2019, 08:15:36) [Clang 10.0.0 (clang-1000.11.45.5)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> from functools import singledispatch >>> @singledispatch ... def f(x): ... pass ... >>> f(x=1) Traceback (most recent call last): File "", line 1, in File "/lib/python3.7/functools.py", line 821, in wrapper raise TypeError(f'{funcname} requires at least ' TypeError: f requires at least 1 positional argument I think it's reasonable to expect f(x=1) to do the same as f(1) in this case. Since there is only one argument, it should be the one passed to dispatch(). Relevant code: def wrapper(*args, **kw): if not args: raise TypeError(f'{funcname} requires at least ' '1 positional argument') return dispatch(args[0].__class__)(*args, **kw) https://github.com/python/cpython/blob/445f1b35ce8461268438c8a6b327ddc764287e05/Lib/functools.py#L819-L824 I think the wrapper method could use something like next(iter(d.values())) instead of args[0] when there are no args, but exactly one keyword argument. I am happy to make the change myself
msg341017 - (view) Author: Karthikeyan Singaravelan (xtreak) * (Python committer) Date: 2019-04-28 02:56
This was introduced as part of .
msg341019 - (view) Author: Kevin (KevinG) Date: 2019-04-28 03:32
I have read before posting this one. The error message was introduced there, but the behavior hasn't changed. The problem that solves is that while singledispatch requires at least one positional argument, there was no explicit error message that told you that when you didn't pass any. What this issue is about, is that singledispatch could also work without positional arguments IF only one keyword argument is provided.
msg415464 - (view) Author: Tim Mitchell (Tim Mitchell2) * Date: 2022-03-18 01:56
I would really prefer the dispatch logic remains simple and fast, rather than handle single keyword arguments.
History
Date User Action Args
2022-04-11 14:59:14 admin set github: 80925
2022-03-18 01:56:32 Tim Mitchell2 set nosy: + Tim Mitchell2messages: +
2019-04-28 03:32:56 KevinG set messages: +
2019-04-28 02:56:44 xtreak set nosy: + doerwalter, lukasz.langa, xtreak, methanemessages: +
2019-04-28 01:21:36 KevinG create