Re: string: __iter__()?
John Roth: > The iter() builtin creates an iterator for any > object that obeys the sequence protocol. > Since strings obey the sequence protocol there > is no real advantage to adding yet another > protocol to an already very fat object. Okay! > This does, however, mean that testing > for the presence of __iter__ is incomplete; > one also has to test for __getattr__ if the > object doesn't have an __Iter__ method. Should be __getitem__ and not __getattr__!? > Depending on your program logic, it > may be easier to just use iter() and > handle the exception if it fails. Okay, I'll do it this way - except will then raise a TypeError, as I just found in the docs! > See PEP 234 for a discussion of the > reasons for doing it this way. > Thanks for pointing this out! Chris PS: Thanks to all posters in this thread for your illuminative comments! -- http://mail.python.org/mailman/listinfo/python-list
string: __iter__()?
Hello! Just for curiosity i'd like to know why strings don't support the iteration protocoll!? Is there some deeper reason for this? >>> hasattr('SomeString', '__iter__') False In Python 2.5 it's actually simple to obtain one: >>> myIter = (c for c in 'SomeString') >>> myIter.next() 'S' Thanks for info! Chris -- http://mail.python.org/mailman/listinfo/python-list
Re: string: __iter__()?
Am Wed, 04 Oct 2006 12:03:41 +0200 schrieb Fredrik Lundh: > > really? iter("SomeString") works just fine for me. > Hmm, right! But then why doesn't dir('SomeString') show an __iter__ method? Seems to be implmented differently than with e.g. lists? Know why? -- http://mail.python.org/mailman/listinfo/python-list
Re: string: __iter__()?
Am Wed, 04 Oct 2006 11:59:07 +0200 schrieb mrquantum: > Hello! > > Just for curiosity i'd like to know why strings don't support the > iteration protocoll!? Is there some deeper reason for this? > Sorry, was to hasty by saying "... don't support the iteration protocol'! Sure they do, as the iter('SomeString') function or the construction for c in 'SomeString' show. It's just not implemented by a __iter__ method of the string in question! -- http://mail.python.org/mailman/listinfo/python-list
Re: string: __iter__()?
Am Wed, 04 Oct 2006 12:24:48 +0200 schrieb Peter Otten: > > The older pre-__iter__() iteration style relying on __getitem__() still > works: > class A: > ... def __getitem__(self, index): > ... return [3,2,1][index] > ... for item in A(): > ... print item > ... > 3 > 2 > 1 > Thanks! I see: >>> class B: ... def __iter__(self): ... for i in xrange(3): ... yield [3,2,1][i] ... >>> myIter = B().__iter__() >>> myIter.next() 3 >>> myIter.next() 2 >>> myIter.next() 1 Chris -- http://mail.python.org/mailman/listinfo/python-list