Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.python > #4337

Re: [Python-de] Schleifen die ohne Durchlaufen des Schleifenkörpers beendet wurden

From Mike Müller <mmueller@python-academy.de>
Newsgroups de.comp.lang.python
Subject Re: [Python-de] Schleifen die ohne Durchlaufen des Schleifenkörpers beendet wurden
Date 2016-03-29 17:47 +0200
Organization Python Academy GmbH & Co. KG
Message-ID <mailman.157.1459266454.28225.python-de@python.org> (permalink)
References (3 earlier) <A201B172-63F7-484B-80FB-EB92999275A7@darwin.in-berlin.de> <533CBF60-D919-4211-8155-ACC90B848839@web.de> <56F47AD1.5040008@chrisarndt.de> <56F525AC.10600@python-academy.de> <56F93B79.4090008@chrisarndt.de>

Show all headers | View raw


[Multipart message — attachments visible in raw view] - view raw

Am 28.03.16 um 16:11 schrieb Christopher Arndt:
> Am 25.03.2016 um 12:49 schrieb Mike Müller:
>> object() ist der Sentinel schlechthin.
> 
> Stimmt, das hatte ich mir noch gar nicht so bewusst gemacht.
> 
>> Alle Funktionen haben immer einen Rückgabewert. Damit muss ich `i`
>> nicht zwingend als Argument mitgeben.
> 
> Das habe ich nicht verstanden. Wenn man über eine Kollektion iteriert,
> will man doch meistens mit jedem Element irgendetwas machen, muss es
> dann also auch an die Verarbeitungsfunktion übergeben.

In den meisten Fällen ja. Es könnte aber auch sein, dass ich einfach
etwas so oft tun will wie Elemente in der Kollektion sind.
Zum Beispiel zu was:

for _ in range(len(collection)):
    # mach was

aber halt ohne `len`:

for i in collection:
    # mach was

> Und ob ich das Element an die Verarbeitungsfunktion übergebe oder nicht,
> hat doch nichts mit ihrem Rückgabewert zu tun.
> Vielleicht kannst du nochmal erklären, was du meinst?

Du hast Recht. In deinem Beispiel ändert sich `i` ja sobald eine
Schleife aktiv war. Also hat auch die Änderung von `i` nichts mit
dem Aufruf der Funktion zu tun. Das Testen auf die Änderung des
Rückgabewertes bringt also keinen Vorteil außer in diesem äußerst
konstruierten Fall. (Dies Beispiel ist von der python-ideas Liste.
Ich habe einfach mal nach der von Sven angesprochenen Diskussion
gesucht):

item = object()
counter = 0
for item in locals().values():
    counter += 1
print(counter)
if item is item:
    print('no loop')

Ausgabe:

41
no loop

Das jemand innerhalb einer Funktion eine globale Variable mit
dem Namen `sentinel` anlegt geht natürlich auch. Ich bin
aber grundsätzlich geben `global`. ;)

Mike


> 
> 
> Chris
> 
> 
> 
> _______________________________________________
> python-de maillist  -  python-de@python.org
> https://mail.python.org/mailman/listinfo/python-de
> 


Back to de.comp.lang.python | Previous | Next | Find similar


Thread

Re: [Python-de]  Schleifen die ohne Durchlaufen des Schleifenkörpers beendet wurden Mike Müller <mmueller@python-academy.de> - 2016-03-29 17:47 +0200

csiph-web