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
