Meinews.de  


Zurück   Meinews.de > Forum > Newsgroups de.comp.lang.* Forum > Newsgroup de.comp.lang.python
Registrieren FAQ Benutzerliste Kalender Suchen Heutige Beiträge Alle Foren als gelesen markieren

Newsgroup de.comp.lang.python Programmieren mit Python.

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 10-29-2009, 10:32 PM
Jan-Herbert Damm
 
Beiträge: n/a
Standard indent - unklarheit

hallo zusammen,

Ich stehe mal wieder auf dem schlauch.

Mein lehrbuch bietet mir diese methode an:

----zitat----

def intersect(self, *others):
res = []
for x in self:
for other in others:
if x not in other: break
# den folgenden indent von else verstehe ich nicht:
else:
res.append(x)
return Set(res)

----ende zitat----

Müsste sich das else nicht auf das vorhergehende if beziehen? Meine version
(die auch zu funktionieren scheint) ist so:

----zitat---

def intersect(self, *others):
res = []
for x in self:
for other in others:
if x not in other:
break
else:
res.append(x)
return Set(res)

----ende zitat----

Nach meinen tests kann das else ungestraft sogar noch einen indent weiter
links stehen. Wie kann das sein?

Anmerkung: Ich habe dazu
http://www.secnetix.de/olli/Python/b...dentation.hawk
gelesen und dort ist es auch merkwürdig:

----zitat----

/* Warning: bogus C code! */

if (some condition)
if (another condition)
do_something(fancy);
else
this_sucks(badluck);

-----ende zitat----

An diesem negativbeispiel wird erklärt, daß das else irreführend steht, weil
es sich auf das nächstgelegene if beziehen muss. Und am ende steht dieses
positiv beispiel für python:

---zitat---

>>> if foo:

.... if bar:
.... x = 42
.... else:
.... print foo
....

-----ende zitat---

das hat mich endgültig verwirrt.

freundliche grüße

jan
Mit Zitat antworten
Alt Today
Advertising
Google Adsense
 
This advertising will not be shown
in this way to registered members.
Register your free account today
and become a member on
Meinews.de
Standard Sponsored Links

  #2  
Alt 10-29-2009, 10:39 PM
Diez B. Roggisch
 
Beiträge: n/a
Standard Re: indent - unklarheit

Jan-Herbert Damm schrieb:
> hallo zusammen,
>
> Ich stehe mal wieder auf dem schlauch.
>
> Mein lehrbuch bietet mir diese methode an:
>
> ----zitat----
>
> def intersect(self, *others):
> res = []
> for x in self:
> for other in others:
> if x not in other: break
> # den folgenden indent von else verstehe ich nicht:
> else:
> res.append(x)
> return Set(res)
>
> ----ende zitat----
>
> Müsste sich das else nicht auf das vorhergehende if beziehen? Meine version
> (die auch zu funktionieren scheint) ist so:
>
> ----zitat---
>
> def intersect(self, *others):
> res = []
> for x in self:
> for other in others:
> if x not in other:
> break
> else:
> res.append(x)
> return Set(res)
>
> ----ende zitat----
>
> Nach meinen tests kann das else ungestraft sogar noch einen indent weiter
> links stehen. Wie kann das sein?
>
> Anmerkung: Ich habe dazu
> http://www.secnetix.de/olli/Python/b...dentation.hawk
> gelesen und dort ist es auch merkwürdig:
>
> ----zitat----
>
> /* Warning: bogus C code! */
>
> if (some condition)
> if (another condition)
> do_something(fancy);
> else
> this_sucks(badluck);
>
> -----ende zitat----
>
> An diesem negativbeispiel wird erklärt, daß das else irreführend steht, weil
> es sich auf das nächstgelegene if beziehen muss. Und am ende steht dieses
> positiv beispiel für python:
>
> ---zitat---
>
>>>> if foo:

> ... if bar:
> ... x = 42
> ... else:
> ... print foo
> ...
>
> -----ende zitat---
>
> das hat mich endgültig verwirrt.


Tatsaechlich gibt es in Python eine etwas unintuitive, aber durchaus
gelegentlich praktische else-Klausel sowohl nach Schleifen, als auch
nach try/except-Bloecken.

Dabei wird das else dann ausgefuehrt, wenn der Block davor ohne
"Probleme" beendet wurde. Im fall einer Schleife, wenn sie
"leergelaufen" ist und *nicht* mit einem "break" beendet wurde, und bei
try/except wenn keine Exception auftrat.

Probier einfach mal folgendes im Interpreter aus:

def test(n):
for i in xrange(10):
if i > n:
break
else:
print "durchgelaufen"


test(5)
test(100)


MfG Diez
Mit Zitat antworten
  #3  
Alt 10-30-2009, 06:43 AM
Stefan Behnel
 
Beiträge: n/a
Standard Re: indent - unklarheit

Jan-Herbert Damm, 29.10.2009 23:32:
> Und am ende steht dieses positiv beispiel für python:
>
> >>> if foo:

> ... if bar:
> ... x = 42
> ... else:
> ... print foo


Wenn die Einrückung da genauso steht, dann ist das sicherlich kein
Positivbeispiel. Aber am Prompt passiert sowas eben schonmal.

Stefan
Mit Zitat antworten
  #4  
Alt 10-30-2009, 03:25 PM
Jan-Herbert Damm
 
Beiträge: n/a
Standard Re: indent - unklarheit

Hallo,

zunächst danke!


Diez B. Roggisch <deets*nospam.web.de> schrieb:

> Tatsaechlich gibt es in Python eine etwas unintuitive, aber durchaus
> gelegentlich praktische else-Klausel sowohl nach Schleifen, als auch
> nach try/except-Bloecken.
>
> Dabei wird das else dann ausgefuehrt, wenn der Block davor ohne
> "Probleme" beendet wurde. Im fall einer Schleife, wenn sie
> "leergelaufen" ist und *nicht* mit einem "break" beendet wurde, und bei
> try/except wenn keine Exception auftrat.
>
> Probier einfach mal folgendes im Interpreter aus:
>
> def test(n):
> for i in xrange(10):
> if i > n:
> break
> else:
> print "durchgelaufen"
>
>
> test(5)
> test(100)


Ok, bei test(5) zeigt python nichts an, weil "break" gleich beim ersten i in
der range feuert. Definitionsgemäß springt er hinter die innerste umgebende
schleife, also hinter das else und ist damit schon am ende.

Nun meine gegenprobe mit der mir logischer erscheinenden indentierung:

In [19]: def test(n):
....: for i in xrange(10):
....: if i > n:
....: break
....: else:
....: print("durchgelaufen")
....:
....:

In [20]: test(5)
durchgelaufen
durchgelaufen
durchgelaufen
durchgelaufen
durchgelaufen
durchgelaufen

In [21]: test(100)
durchgelaufen
durchgelaufen
durchgelaufen
durchgelaufen
durchgelaufen
durchgelaufen
durchgelaufen
durchgelaufen
durchgelaufen
durchgelaufen

Ich ahne, daß dieser code etwas ganz anderes aussagt, kann es aber immer noch
nicht ganz begreifen. Offenbar ignoriert python hier das "else", denn er
erreicht die print-funktion solange das break feuert.

gruß

jan

>
> MfG Diez



--
I have not failed. I have just found 10,000 ways that won't work.
-- Thomas Edison
Mit Zitat antworten
  #5  
Alt 10-30-2009, 03:54 PM
Thomas Rachel
 
Beiträge: n/a
Standard Re: indent - unklarheit

Jan-Herbert Damm schrieb:

>> def test(n):
>> for i in xrange(10):
>> if i > n:
>> break
>> else:
>> print "durchgelaufen"
>>
>>
>> test(5)
>> test(100)

>
> Ok, bei test(5) zeigt python nichts an, weil "break" gleich beim ersten i in
> der range feuert. Definitionsgemäß springt er hinter die innerste umgebende
> schleife, also hinter das else und ist damit schon am ende.


Genau.


> Nun meine gegenprobe mit der mir logischer erscheinenden indentierung:
>
> In [19]: def test(n):
> ....: for i in xrange(10):
> ....: if i > n:
> ....: break
> ....: else:
> ....: print("durchgelaufen")
> ....:
> ....:


Mit der Indentierung hast Du aber auch die Semantik des Programms
geändert. Diez' else: gehört zum for, Deins zum if.

Das else beim for wird einmal ausgeführt, wenn die for-Schleife
durchgelaufen ist (also wenn i immer nur <= n, niemals > n war); das
else beim if jedesmal, wenn i <= n ist.

Es kommt eben ganz drauf an, was man erreichen will.

> Ich ahne, daß dieser code etwas ganz anderes aussagt, kann es aber immer noch
> nicht ganz begreifen. Offenbar ignoriert python hier das "else", denn er
> erreicht die print-funktion solange das break feuert.


Nein, jedesmal, wenn es nicht feuert.


Thomas
Mit Zitat antworten
  #6  
Alt 10-30-2009, 04:23 PM
Jan-Herbert Damm
 
Beiträge: n/a
Standard Re: indent - unklarheit

Danke Thomas,

Thomas Rachel <nutznetz-drei-zweitausendneun*spamschutz.glglgl.net> schrieb:
jan:
>> Nun meine gegenprobe mit der mir logischer erscheinenden indentierung:
> >
>> In [19]: def test(n):
>> ....: for i in xrange(10):
>> ....: if i > n:
>> ....: break
>> ....: else:
>> ....: print("durchgelaufen")
>> ....:
>> ....:

>
> Mit der Indentierung hast Du aber auch die Semantik des Programms
> geändert. Diez' else: gehört zum for, Deins zum if.


Ah, hier lag vermutlich der knoten in meinen gehirnwindungen: ich hatte
irgendwie vorausgesetzt, dass else immer nur zu if passt. Dass ein for auch
ein else nach sich ziehen kann kam mit nicht in den sinn.

> Das else beim for wird einmal ausgeführt, wenn die for-Schleife
> durchgelaufen ist (also wenn i immer nur <= n, niemals > n war); das
> else beim if jedesmal, wenn i <= n ist.
>
> Es kommt eben ganz drauf an, was man erreichen will.
>
>> Ich ahne, daß dieser code etwas ganz anderes aussagt, kann es aber immer noch
>> nicht ganz begreifen. Offenbar ignoriert python hier das "else", denn er
>> erreicht die print-funktion solange das break feuert.

>
> Nein, jedesmal, wenn es nicht feuert.


ach ja, natürlich.

jan
Mit Zitat antworten
  #7  
Alt 10-30-2009, 05:57 PM
Thomas Rachel
 
Beiträge: n/a
Standard Re: indent - unklarheit

Jan-Herbert Damm schrieb:

>> Mit der Indentierung hast Du aber auch die Semantik des Programms
>> geändert. Diez' else: gehört zum for, Deins zum if.

>
> Ah, hier lag vermutlich der knoten in meinen gehirnwindungen: ich hatte
> irgendwie vorausgesetzt, dass else immer nur zu if passt. Dass ein for auch
> ein else nach sich ziehen kann kam mit nicht in den sinn.


Obwohl Diez es Dir vorher schon verraten hat? ;-)


Thomas
Mit Zitat antworten
 
Antwort


Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen
Es ist dir nicht erlaubt, auf Beiträge zu antworten
Es ist dir nicht erlaubt, Anhänge anzufügen
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten

vB Code ist An
Smileys sind An
[IMG] Code ist An
HTML-Code ist Aus

Ähnliche Themen
Thema Erstellt von Forum Antworten Letzter Beitrag
Unklarheit innerer/äußerer Rand Jens Newsgroup de.comp.text.tex 2 03-17-2009 09:33 AM
Unklarheit über SPD-Rauswurf Clements Willi Lustig Newsgroup de.soc.politik.misc 10 07-31-2008 06:59 PM
Unklarheit bei Veräußerungsverlusten Horst Stolz Newsgroup de.soc.recht.steuern+buchfuehrung 1 06-09-2008 03:43 PM
Unklarheit bei Kündigungsfrist. Gewerbe. Andreas Meissner Newsgroup de.soc.recht.wohnen 0 11-24-2007 12:08 AM
Elektronenablenkröhre -- kleine Unklarheit... Michael Hagedorn Newsgroup de.sci.physik 13 11-20-2007 08:36 AM


Alle Zeitangaben in WEZ. Es ist jetzt 07:04 PM Uhr.





Powered by: vBulletin Version 3.6.7 (Deutsch)
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Forum SEO by Zoints