Guido van Rossum wrote: [snip illustration of how generators (and other iterators) can be modified to be used in with-blocks] > the most common use case should not be an alternate looping syntax > (even though it *is* technically a loop) but a more general "macro > statement expansion"
I'm sure I could get used to it, but my intuition for with f = with_file(filename): for line in f: print process(line) is that the f = with_file(filename) executes only once. That is, as you said, I don't expect this to be a looping syntax. Of course, as long as the generators (or other objects) here yield only one value (like with_file does), then the with-block will execute only once. But because the implementation lets you make the with-block loop if you want, it makes be nervous... I guess it would be helpful to see example where the looping with-block is useful. So far, I think all the examples I've seen have been like with_file, which only executes the block once. Of course, the loop allows you to do anything that you would normally do in a for-loop, but my feeling is that this is probably better done by composing a with-block that executes the block only once with a normal Python for-loop. I'd almost like to see the with-block translated into something like it = EXPR try: VAR = it.next() except StopIteration: raise WithNotStartedException err = None try: BODY except Exception, err: # Pretend "except Exception:" == "except:" pass try: it.next_ex(err) except StopIteration: pass else: raise WithNotEndedException where there is no looping at all, and the iterator is expected to yield exactly one item and then terminate. Of course this looks a lot like: it = EXPR VAR = it.__enter__() err = None try: BODY except Exception, err: # Pretend "except Exception:" == "except:" pass it.__exit__(err) So maybe I'm just still stuck on the enter/exit semantics. ;-) STeVe -- You can wordify anything if you just verb it. --- Bucky Katt, Get Fuzzy _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com