[Python-Dev] NamedTuple (was: Py2.6 ideas)
python at rcn.com
python at rcn.com
Tue Feb 20 18:59:08 CET 2007
[Raymond Hettinger]
> The constructor signature ... Point(*fetchall(s)),
> and it allows for direct construction with Point(2,3) without
> the slower and weirder form: Point((2,3)).
[Jim Jewett]
>> If you were starting from scratch, I would agree
>> whole-heartedly; this is one of my most frequent
>> mistakes.The question is whether it makes sense to
>> "fix" NamedTuple without also fixing regular tuple, list,
Yes. Tuples and lists both have syntactic support for direct construction and NamedTuples aspire to that functionality:
vec = (dx*3.0, dy*dx/dz, dz) # Regular tuple
vec = Vector(dx*3.0, dy*dx/dz, dz) # Named tuple
I've worked with the current version of the recipe for a long time and after a while the wisdom of the signature becomes self-evident. We REALLY don't want:
vec = Vector((dx*3.0, dy*dx/dz, dz)) # yuck
For conversion from other iterables, it is REALLY easy to write:
vec = Vector(*partial_derivatives)
Remember, list() and tuple() are typically used as casts, not as direct constructors. How often do you write:
dlist = list((dx*3.0, dy*dx/dz, dz))
That is usually written:
dlist = [dx*3.0, dy*dx/dz, dz]
I think the Vec((dx, dy, dz)) sysntax falls into the category of foolish consistency.
Raymond
More information about the Python-Dev
mailing list