for...else

Rustom Mody rustompmody at gmail.com
Wed Jun 3 10:40:48 EDT 2015


On Tuesday, June 2, 2015 at 4:56:57 PM UTC+5:30, acdr wrote:
> Hi,
> 
> Currently, in various places in my code, I have the equivalent of:
> 
> for x in it:
>     if complicated_calculation_1():
>         cleanup()
>         break
>     complicated_calculation_2()
>     if complicated_calculation_3():
>         cleanup()
>         break
> 
> Obviously, I'm repeating myself by having two separate calls to
> cleanup(). I can't really see a nicer way to do this. (Though I see
> plenty of non-nice ways to do this, such as adding "broken = True" in
> front of every "break", and then after the loop is done, have an "if
> broken" section.) Other solutions that I'm not particularly fond of
> can be found on stackexchange, where someone else is trying to do the
> same thing:
> http://stackoverflow.com/questions/3296044/opposite-of-python-for-else
> 
> I'm wondering if there is a demand for expanding the "for...else"
> functionality to be expanded also have a block of code that only gets
> called if the loop is broken out of. I.e.:
> 
> for x in it:
>     ...
> then:
>     # "break" was called
>     ...
> else:
>     # "break was not called
>     ...

This question prompts a counter question whose answer Ive been hunting 
unsuccessfully for a while.

The well-known Bohm-Jacopini theorem says that any goto-based program can be
de-goto-ized using booleans:
http://en.wikipedia.org/wiki/Structured_program_theorem.

However there is a complementary theorem (due to Knuth??) that the exact details and sequence of tests performed in the unstructured and the structurized versions may be significantly different.
IOW the unstructured program can be significantly more efficient.

Does anyone know/have the reference to this other theorem?



More information about the Python-list mailing list