Re: string: __iter__()?

2006-10-04 Thread mrquantum
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__()?

2006-10-04 Thread 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?

>>> 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__()?

2006-10-04 Thread mrquantum
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__()?

2006-10-04 Thread mrquantum
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__()?

2006-10-04 Thread mrquantum
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