| Deutsch English Français Italiano |
|
<chatbot-20240402181409@ram.dialup.fu-berlin.de> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!news.mixmin.net!news2.arglkargh.de!news.in-chemnitz.de!3.eu.feeder.erje.net!feeder.erje.net!fu-berlin.de!uni-berlin.de!not-for-mail
From: ram@zedat.fu-berlin.de (Stefan Ram)
Newsgroups: comp.lang.python
Subject: A technique from a chatbot
Date: 2 Apr 2024 17:18:16 GMT
Organization: Stefan Ram
Lines: 61
Expires: 1 Feb 2025 11:59:58 GMT
Message-ID: <chatbot-20240402181409@ram.dialup.fu-berlin.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Trace: news.uni-berlin.de 3X8pLkTXGcuuqfYVeJjcGwdmUS3IwdxmJ0nLzj3m47zYSC
Cancel-Lock: sha1:Rs/VAKciprzdfa2s6TZJdqrAPfM= sha256:rQFdBL7OFGwpFO/rzXwQ4yON5J1lZEKh15pJJJgr03c=
X-Copyright: (C) Copyright 2024 Stefan Ram. All rights reserved.
Distribution through any means other than regular usenet
channels is forbidden. It is forbidden to publish this
article in the Web, to change URIs of this article into links,
and to transfer the body without this notice, but quotations
of parts in other Usenet posts are allowed.
X-No-Archive: Yes
Archive: no
X-No-Archive-Readme: "X-No-Archive" is set, because this prevents some
services to mirror the article in the web. But the article may
be kept on a Usenet archive server with only NNTP access.
X-No-Html: yes
Content-Language: en-US
Bytes: 3209
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:
Main.py
def list_():
list__ =[ 'delta', 'epsilon', 'zeta', 'eta', 'theta' ]
for entry in list__:
print( f'Now yielding {entry}.' )
yield entry
def first_word_beginning_with_e( list_ ):
return next( ( word for word in list_() if word[ 0 ]== 'e' ), None )
print( first_word_beginning_with_e( list_ ))
sys.stdout
Now yielding delta.
Now yielding epsilon.
epsilon