"Goto" statement in Python

bartc bc at freeuk.com
Thu Apr 13 10:52:24 EDT 2017


On 13/04/2017 15:35, Chris Angelico wrote:
> On Thu, Apr 13, 2017 at 9:31 PM, alister <alister.ware at ntlworld.com> wrote:
>> I expect you could simulate most of these with a custom exception
>> for example break from nested loop:
>>
>> class GoTo(Exception):
>>     pass
>>
>> try:
>>     for i in range(100):
>>         print i
>>         for j in range (50):
>>             print j
>>             if i*j>60:
>>                 raise GoTo
>> except GoTo:
>>     print "Exit Early"
>> print "end of loop"
>
> Or you could turn it into a function and "return". Or if you feel like
> it, you could turn the nested loops into a generator, then iterate
> over it and break when you need to.

I know this isn't the Python need-for-speed thread, but this is a 
classic example where the lack of one simple feature leads to using 
slower, more cumbersome ones.

'goto' would be one easy-to-execute byte-code; no variables, objects or 
types to worry about. If implemented properly (with the byte-code 
compiler using a dedicated name-space for labels) there would be no name 
lookups.

Function calls, returns and generators are rather more heavyweight in 
comparison.

  There are many things you CAN do,
> but to the true goto-aficionado, none of them is as clean.
>
> Personally, I can't remember the last time I yearned for "goto" in
> Python, and the only times I've ever wished for it or used it in other
> languages have been multi-loop breaks or "for...else" blocks. And
> neither is very frequent.

It might be a better idea to have a multi-level loop break then. This 
would also be an absolute jump byte-code.

-- 
bartc






More information about the Python-list mailing list