Some people can't believe it when I say that chatbots improve my programming productivity. So, here's a technique I learned from a chatbot!
It is a structured "break". "Break" still is a kind of jump, you know?
So, what's a function to return the first word beginning with an "e" in a given list, like for example
[ 'delta', 'epsilon', 'zeta', 'eta', 'theta' ]
? Well it's
def first_word_beginning_with_e( list_ ): for word in list_: if word[ 0 ]== 'e': return word
. "return" still can be considered a kind of "goto" statement. It can lead to errors:
def first_word_beginning_with_e( list_ ): for word in list_: if word[ 0 ]== 'e': return word something_to_be_done_at_the_end_of_this_function()
The call sometimes will not be executed here! So, "return" is similar to "break" in that regard.
But in Python we can write:
def first_word_beginning_with_e( list_ ): return next( ( word for word in list_ if word[ 0 ]== 'e' ), None )
. No jumps anymore, yet the loop is aborted on the first hit (if I guess correctly how its working).
And it is this combination of "next", a generator, and "None" that the chatbot showed me when I asked him how to get the first component of a list that matches a condition!
PS: Let's verify the earliness of the exit out of the loop: