2.2 features
Tim Peters
tim.one at home.com
Wed Jul 25 17:51:16 EDT 2001
[Nick Perkins]
> I like generators a lot. Here's a fun one:
>
> #------ begin code
> [snip]
> if __name__ == "__main__":
> g = fib()
> for i in range(9):
> print g.next(),
>
> #------ end code
[Jeff Shannon]
> Haven't looked into this in detail, or even downloaded 2.2 yet, but...
>
> couldn't that be written as:
>
> if __name__ == '__main__':
> for i in fib():
> print i,
>
> ???
The difference is that you never stop printing, but the earlier code printed
only 9 of them.
> (being under the impression that the main point of iterators is
> convenient for-loop usage...)
Indeed it is, and generators are just another flavor of iterator; explicit
use of .next() should rarely be needed (yet neither feared <wink>). Another
way to write the "only 9" loop:
count = 0
for f in fib():
print f,
count += 1
if count >= 9:
break
That's something of a strain in such a simple case, but in general the
ability to "get out of a loop early" without needing to materialize the
whole sequence first is a major practical application of the iterator
protocol.
for statement in python_program.parse():
if statement.kind is FUTURE_STMT:
print "Start a flamewar about", str(statement)
break
More information about the Python-list
mailing list