On 2015-01-26 19:39, Petr Viktorin wrote:
On Mon, Jan 26, 2015 at 8:29 PM, Ethan Furman <et...@stoneleaf.us> wrote:
On 01/26/2015 11:24 AM, Barry Warsaw wrote:
On Jan 26, 2015, at 10:55 AM, Ethan Furman wrote:

In the your example

 from_env = {'a': 12}
 from_config = {'a': 13}

 f(**from_env, **from_config)

I would think 'a' should be 13, as from_config is processed /after/ from_env.

So which is it?

In the face of ambiguity, refuse the temptation to guess.

Lots of things are ambiguous until one learns the rules.  ;)

I don't see why `f(**{'a': 12}, **{'a': 13})` should not be equivalent
to `f(a=12, **{'a':13})` – iow, raise TypeError.

One the one hand we have:

>>> foo(a=12, **{'a': 13})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: foo() got multiple values for keyword argument 'a'

and on the other hand we have:

>>> foo(a=12, a=13)
  File "<stdin>", line 1
SyntaxError: keyword argument repeated

(Should this be a SyntaxError?)

But we also have:

>>> {'a': 12, 'a': 13}
{'a': 13}

So, what should:

>>> f(**from_env, **from_config)

do if there are common keys?

Raise an exception? Behave like dict.update? Behave like ChainMap?

_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to