Raymond Hettinger added the comment:

> I'm aware of duck typing but I don't think this 
> is the right place for it. 

The code for dicts is very old, stable, and unlikely to change.  Also, the 
logic of checking for .keys() is immortalized in the 
collections.abc.MutableMapping update() method.

For the most part, consumers of iterables, sequences, and mappings are allowed 
to use duct-typing (this is a feature of the language, not a bug).

The docs can be improved in a number of places.  For example the docstring on 
the dict constructor is out of sync with the dict.update() method:

    >>> print(dict.__doc__)
    dict() -> new empty dictionary
    dict(mapping) -> new dictionary initialized from a mapping object's
        (key, value) pairs
    dict(iterable) -> new dictionary initialized as if via:
        d = {}
        for k, v in iterable:
            d[k] = v
    dict(**kwargs) -> new dictionary initialized with the name=value pairs
        in the keyword argument list.  For example:  dict(one=1, two=2)
    >>> print(dict.update.__doc__)
    D.update([E, ]**F) -> None.  Update D from dict/iterable E and F.
    If E is present and has a .keys() method, then does:  for k in E: D[k] = 
E[k]
    If E is present and lacks a .keys() method, then does:  for k, v in E: D[k] 
= v
    In either case, this is followed by: for k in F:  D[k] = F[k]

In addition, the glossary entries for iterable, sequence, and mapping need to 
be improved to distinguish between their somewhat vague use in a general sense 
versus the specific meaning of isinstance(obj, Mapping).  Unless the docs 
specify a check for the latter, they almost always do some form of duck-typing 
or a check for concrete built-in class or subclass.

Terms like "mapping" and "sequence" are often used somewhat generally both 
inside and outside the Python world.  Sometimes mapping is used in the 
mathematic sense (pairing each member of the domain with each member of the 
range), http://www.icoachmath.com/math_dictionary/mapping.html, and sometimes 
in the sense of a subset of dict capabilities (i.e. has __getitem__ and keys).  

The docs for PyMapping_Check() need to be updated to indicate the known 
limitations of the check and to disambiguate it from isinstance(obj, Mapping).

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue24659>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to