[issue36744] functools.singledispatch: Shouldn't require a positional argument if there is only one keyword argument

2022-03-17 Thread Tim Mitchell


Tim Mitchell  added the comment:

I would really prefer the dispatch logic remains simple and fast, rather than 
handle single keyword arguments.

--
nosy: +Tim Mitchell2

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue36744] functools.singledispatch: Shouldn't require a positional argument if there is only one keyword argument

2019-04-27 Thread Kevin


Kevin  added the comment:

I have read issue33967 before posting this one.

The error message was introduced there, but the behavior hasn't changed.

The problem that issue33967 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.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue36744] functools.singledispatch: Shouldn't require a positional argument if there is only one keyword argument

2019-04-27 Thread Karthikeyan Singaravelan


Karthikeyan Singaravelan  added the comment:

This was introduced as part of issue33967.

--
nosy: +doerwalter, inada.naoki, lukasz.langa, xtreak

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue36744] functools.singledispatch: Shouldn't require a positional argument if there is only one keyword argument

2019-04-27 Thread Kevin


New submission from Kevin :

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

--
components: Library (Lib)
messages: 341016
nosy: KevinG, rhettinger
priority: normal
severity: normal
status: open
title: functools.singledispatch: Shouldn't require a positional argument if 
there is only one keyword argument
type: behavior
versions: Python 3.8

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com