On 18/02/13 14:15, Oscar Benjamin wrote: > On 18 February 2013 14:09, John Reid <j.r...@mail.cryst.bbk.ac.uk> wrote: >> On 18/02/13 12:11, Dave Angel wrote: >>> On 02/18/2013 06:47 AM, John Reid wrote: >>>> Hi, >>>> >>>> I was hoping namedtuples could be used as replacements for tuples in >>>> all instances. There seem to be some differences between how tuples >>>> and namedtuples are created. For example with a tuple I can do: >>>> >>>> a=tuple([1,2,3]) >>>> >>>> with namedtuples I get a TypeError: >>>> >>>> from collections import namedtuple >>>> B=namedtuple('B', 'x y z') >>>> b=B([1,2,3]) >>> >>> You are passing a single list to the constructor, but you specified that >>> the namedtuple was to have 3 items. So you need two more. >> >> I'm aware how to construct the namedtuple and the tuple. My point was >> that they use different syntaxes for the same operation and this seems >> to break ipython. I was wondering if this is a necessary design feature >> or perhaps just an oversight on the part of the namedtuple author or >> ipython developers. > > I would say that depending on isinstance(obj, tuple) was the error. I > can't offer a suggestion as you haven't clarified what the purpose of > this code in canSequence() is or what constraints it is expected to > satisfy. >
Like I said it is not my code. I'm hoping the IPython developers can help me out here. That said it would be nice to know the rationale for namedtuple.__new__ to have a different signature to tuple.__new__. I'm guessing namedtuple._make has a similar interface to tuple.__new__. Does anyone know what the rationale was for this design? -- http://mail.python.org/mailman/listinfo/python-list