nach Iterierbarkeit fragen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
mzh
User
Beiträge: 295
Registriert: Dienstag 3. März 2009, 15:27
Wohnort: ZH

Beitragvon mzh » Mittwoch 8. April 2009, 19:24

Hm, keine Ahnung, wie ich darauf gekommen bin..
Ah, ich meinte callable.
[url=http://www.proandkon.com]proandkon.com[/url]
BlackJack

Beitragvon BlackJack » Mittwoch 8. April 2009, 19:54

@Goswin: Die zweite Variante ist genauso unzuverlässig wie die erste, denn ein Objekt das eine `__getitem__()`-Methode besitzt, aber nicht "iterable" ist, hat kein Problem mit dem `iter()`-Aufruf. Auch da "kracht" es erst, wenn man versucht von dem Iterator das erste Element zu holen.

Was letztendlich bedeutet, dass man nicht wirklich auf "iterable" prüfen kann, ohne das Objekt einfach so zu verwenden.
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Beitragvon helduel » Mittwoch 8. April 2009, 20:56

Ab Python 2.6 geht das auch so:

Code: Alles auswählen

from collections import Iterable

class Foo(object):
    def __iter__(self):
        pass

isinstance(list(), Iterable)
# True
isinstance(dict(), Iterable)
# True
isinstance(Foo(), Iterable)
# True

Gruß,
Manuel
BlackJack

Beitragvon BlackJack » Mittwoch 8. April 2009, 21:56

@helduel: Aber auch bei 2.6 erkennt man so nicht alle "iterables":

Code: Alles auswählen

>>> class A(object):
...   def __getitem__(self, i):
...     if i > 5:
...       raise StopIteration()
...     else:
...       return i
...
>>> a = A()
>>> isinstance(a, Iterable)
False
>>> [x for x in a]
[0, 1, 2, 3, 4, 5]


Man muss es halt einfach probieren.
Benutzeravatar
Goswin
User
Beiträge: 361
Registriert: Freitag 8. Dezember 2006, 11:47
Wohnort: Ulm-Böfingen

Beitragvon Goswin » Donnerstag 9. April 2009, 21:03

name hat geschrieben:Schrecklich aussehen tut er [dein Code] trotzdem.

DasIch hat geschrieben:3 Zeilen in eine zu pressen [ist] kein Zeichen von sonderlich schönem Code. Wenn man sowas wie try except, if elif else o.ä. hat macht dies den Code deutlich schwerer zu lesen.


Am Anfang war Python noch script und stur,
da schuf BDFL das Semikolon und sprach:

"Zieh hinaus in alle Module und vermehre dich,
und sammelt um euch die Kleinen unter den Befehlen,
auf dass sie eng zusammenstehen
und ich sie gut übersehen kann"
Und da zogen Semikola ein in Klassen und Methoden,
und sammelten um sich die breaks und die returns,
und alle verwaisten x+=1 und list.sort(),
ein jegliches in seine vorangehende Codezeile.

Und BDFL sah, dass das Semikolon gut war,
und es wurde aus Alfa und Beta die Version t+1.

:wink:
BlackJack

Beitragvon BlackJack » Donnerstag 9. April 2009, 22:05

Ich glaube nicht, das der BDFL das Semikolon so gut findet. Zumindest Quelltext, der in die Standardbibliothek kommen soll, sollte sich an PEP8 halten und das empfiehlt auch einzeilige "Rümpfe" eingerückt in eine neue Zeile zu schreiben.
DasIch
User
Beiträge: 2404
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Beitragvon DasIch » Donnerstag 9. April 2009, 22:13

Der BDFL mag BDFL heißen aber trotzdem ist deswegen muss man seine Meinung nicht gut heißen noch akzeptieren.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 9. April 2009, 22:19

Oh, das gutheißen von Entscheidungen hatten wir heute im IRC schon.

IMHO könnte man das Semikolon komplett loswerden, da gibt es eigentlich keine Fälle wo das Semikolon die Lesbarkeit verbessert (und kommt mit nicht mit ``cgitb``, das finde ich auch nicht gut).
My god, it's full of CARs! | Leonidasvoice vs Modvoice
lunar

Beitragvon lunar » Donnerstag 9. April 2009, 23:37

Eine Diskussion um das Semikolon ... :roll:
BlackJack

Beitragvon BlackJack » Freitag 10. April 2009, 06:47

:-D

@Leonidas: Bei Einzeilern auf der Kommandozeile ist es praktisch. Ansonsten habe ich auch noch keine Verwendung dafür gefunden.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Sonntag 12. April 2009, 21:21

lunar hat geschrieben:Eine Diskussion um das Semikolon ... :roll:


Wir brauchen dringend ein [bikeshed=color] BBCode-Tag, das Text in der entsprechenden Farbe (und in Comic Sans!!!1) hervorhebt.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
Goswin
User
Beiträge: 361
Registriert: Freitag 8. Dezember 2006, 11:47
Wohnort: Ulm-Böfingen

OFF TOPIC

Beitragvon Goswin » Dienstag 14. April 2009, 12:46

DasIch hat geschrieben:Der BDFL mag BDFL heißen aber trotzdem muss man seine Meinung nicht gutheißen noch akzeptieren.
Natürlich hast du recht mit dem Gutheißen (zum Akzeptieren, das heißt zum Lesen, sind wir als Python-Programmierer ja gezwungen). Ich möchte aus meiner obigen Aussage nur folgern, dass die Güte der Semikolons umstritten ist, und kein Mantra daraus gemacht werden sollte. Der BDFL hat ja auch anderes abgesegnet, was mir echt Magenschmerzen bereitet.


Imho finde ich freilich, dass wir unschönen Code anderswo beanstanden sollten, zum Beispiel beim sehr häufigen

Code: Alles auswählen

a, b = c, d   #gemeint ist hier (a,b) = (c,d)

welches jeder naive Außenstehende als

Code: Alles auswählen

a; b = c; d
deuten würde (wer nicht so denkt, ist einfach nicht naiv genug :wink: )
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Beitragvon Darii » Dienstag 14. April 2009, 13:58

BlackJack hat geschrieben:@helduel: Aber auch bei 2.6 erkennt man so nicht alle "iterables":
Strenggenommen schon, wenn es einem aber um for geht, dann muss man halt collections.Sequence nehmen. Wenn einem da jetzt noch ein Spezialfall durch die Lappen geht(ich befürchte aber dein Beispiel tut es) ist der aber wirklich undokumentiert oder die ABCs kaputt.
Zuletzt geändert von Darii am Dienstag 14. April 2009, 14:08, insgesamt 2-mal geändert.
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Re: OFF TOPIC

Beitragvon audax » Dienstag 14. April 2009, 14:02

Goswin hat geschrieben:
DasIch hat geschrieben:Der BDFL mag BDFL heißen aber trotzdem muss man seine Meinung nicht gutheißen noch akzeptieren.
Natürlich hast du recht mit dem Gutheißen (zum Akzeptieren, das heißt zum Lesen, sind wir als Python-Programmierer ja gezwungen). Ich möchte aus meiner obigen Aussage nur folgern, dass die Güte der Semikolons umstritten ist, und kein Mantra daraus gemacht werden sollte. Der BDFL hat ja auch anderes abgesegnet, was mir echt Magenschmerzen bereitet.


Imho finde ich freilich, dass wir unschönen Code anderswo beanstanden sollten, zum Beispiel beim sehr häufigen

Code: Alles auswählen

a, b = c, d   #gemeint ist hier (a,b) = (c,d)

welches jeder naive Außenstehende als

Code: Alles auswählen

a; b = c; d
deuten würde (wer nicht so denkt, ist einfach nicht naiv genug :wink: )


Das ist aber ein tolles Feature.
Vor allem für

Code: Alles auswählen

a,b = b,a


Tuple-Unpacking halt. Steht alles im Tutorial ;)
Benutzeravatar
Goswin
User
Beiträge: 361
Registriert: Freitag 8. Dezember 2006, 11:47
Wohnort: Ulm-Böfingen

Re: OFF TOPIC

Beitragvon Goswin » Dienstag 14. April 2009, 14:32

audax hat geschrieben:Das ist aber ein tolles Feature. Vor allem für

Code: Alles auswählen

a,b = b,a


Ich finde das Feature ja auch toll. Aber die Klammern rund um die Tupel sollten imho Pflicht sein; sie fortzulassen halte ich für unschön. Es geht doch auch so:

Code: Alles auswählen

(a,b) = (b,a)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder