[Python-Dev] The interpreter accepts f(**{'5':'foo'}); is this intentional? (original) (raw)
Eric Smith eric at trueblade.com
Thu Feb 5 16:39:08 CET 2009
- Previous message: [Python-Dev] The interpreter accepts f(**{'5':'foo'}); is this intentional?
- Next message: [Python-Dev] The interpreter accepts f(**{'5':'foo'}); is this intentional?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Calvin Spealman wrote:
I would favor this not being constrained. I don't want every use of ** to cause a pattern match to verify each key. I would even be fine without the check for being strings. Define what it should be, but let the implementation be lax. It is no different from any other place where you need to know its not a promise, just an artifact, and shouldn't rely on what the implementation currently does or does not force.
I agree. There was a similar issue in http://bugs.python.org/issue2598, and we decided not to do anything about it.
Eric.
On Thu, Feb 5, 2009 at 3:03 AM, Michael Haggerty <mhagger at alum.mit.edu> wrote: I can't find documentation about whether there are constraints imposed on the keys in the map passed to a function via **, as in f(**d).
According to http://docs.python.org/reference/expressions.html#id9 , d must be a mapping. testextcall.py implies that the keys of this map must be strings in the following test: >>> f(**{1:2}) Traceback (most recent call last): ... TypeError: f() keywords must be strings But must the keys be valid python identifiers? In particular, the following is allows by the Python 2.5.2 and the Jython 2.2.1 interpreters: >>> f(**{'1':2}) {'1': 2} Is this behavior required somewhere by the Python language spec, or is it an error that just doesn't happen to be checked, or is it intentionally undefined whether this is allowed? Michael
Python-Dev mailing list Python-Dev at python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/ironfroggy%40gmail.com
- Previous message: [Python-Dev] The interpreter accepts f(**{'5':'foo'}); is this intentional?
- Next message: [Python-Dev] The interpreter accepts f(**{'5':'foo'}); is this intentional?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]