[Python-Dev] Very Strange Argument Handling Behavior

Guido van Rossum guido at python.org
Fri Apr 16 16:33:28 CEST 2010


On Fri, Apr 16, 2010 at 7:15 AM, Nick Coghlan <ncoghlan at gmail.com> wrote:
> Mark Dickinson wrote:
>> "dict(x, **y)" as an expression version of x.update(y) seems to be
>> fairly well known[1], so disallowing non-string keyword arguments
>> seems likely to break existing code, as well as (probably?) harming
>> performance.  So I can't see CPython changing here.  I'm not sure
>> whether other implementations should be required to follow suit,
>> though---maybe this should be regarded as an implementation-defined
>> detail?
>
> I would agree with leaving it implementation defined - I don't think
> either PyPy or CPython should be forced to change their current
> behaviour in relation to this. A minor note in the language reference to
> that effect may be worthwhile just to make that stance official.

That is just going to cause some programs to have a portability
surprise. I think one or the other should be fixed. I am fine with
declaring dict({}, **{1:3}) illegal, since after all it is abuse of
the ** mechanism. We should deprecate it in at least one version
though.

-- 
--Guido van Rossum (python.org/~guido)


More information about the Python-Dev mailing list