Moin!
Ich habe mich ein wenig näher mit Mehrfachzuweisungen beschäftigt. Dabei ist ein kleiner Wiki-Artikel entstanden.
http://wiki.python-forum.de/usepolt/seq ... 0unpacking
Zurzeit liegt er noch in meinem Heimverzeichnis, bis ich das allgemeine OK für ein verschieben in den offiziellen Bereich bekomme.
Also, wie siehts aus? Was kann man noch besser machen? Wo soll der Beitrag später mal hin?
Grüße
[neuerWikiArtikel] Mehrfachanweisungen (multiple assignment)
Ich finde das Wort Variable(n) problematisch. Werte oder Objekte an Namen binden finde ich besser.
Der erste Satz ist IMHO auch falsch denn es werden nicht mehreren Variablen mehrere Werte zugewiesen sondern mehreren Variablen wird jeweils *ein* Wert zugewiesen.
Auf der rechten Seite steht auch nur *ein* Wert! Der kann ein beliebiges "iterable" sein, also zum Beispiel wie in Deinen Fällen ein Tupel. Es geht aber auch jedes andere Iterable das exakt so viele Elemente liefert wie Namen auf der linken Seite stehen. Zum Beispiel hätte man auch ``a, b = range(2)`` schreiben können.
Der Titel ist IMHO auch unpassend. Unter Mehrfachzuweisung hätte ich das hier verstanden: ``a = b = 1``. Das was Du da machst läuft bei mir unter der Bezeichnung "sequence unpacking". Was wie oben schon angedeutet im Grunde auch zu einschränkend ist, weil jedes "iterable" verwendet werden kann, nicht nur solche die das Sequenz-Protokoll implementieren.
Der erste Satz ist IMHO auch falsch denn es werden nicht mehreren Variablen mehrere Werte zugewiesen sondern mehreren Variablen wird jeweils *ein* Wert zugewiesen.
Auf der rechten Seite steht auch nur *ein* Wert! Der kann ein beliebiges "iterable" sein, also zum Beispiel wie in Deinen Fällen ein Tupel. Es geht aber auch jedes andere Iterable das exakt so viele Elemente liefert wie Namen auf der linken Seite stehen. Zum Beispiel hätte man auch ``a, b = range(2)`` schreiben können.
Der Titel ist IMHO auch unpassend. Unter Mehrfachzuweisung hätte ich das hier verstanden: ``a = b = 1``. Das was Du da machst läuft bei mir unter der Bezeichnung "sequence unpacking". Was wie oben schon angedeutet im Grunde auch zu einschränkend ist, weil jedes "iterable" verwendet werden kann, nicht nur solche die das Sequenz-Protokoll implementieren.
Hallo BlackJack!
Danke für die schnelle Antwort.
Ich werde also die Einleitung nochmal überabeiten, will das ganze aber nicht so stark vertiefen da dieser Artikel eher an Anfänger gerichtet ist. Daher auch das Gedankenexperiment.
Danke dir.
Danke für die schnelle Antwort.
Das ist, denke ich, Ansichtssache. Variable(n) finde ich sehr aussagekräftig, zumal in den offiziellen Dokumentationen auch die rede von Variabl(en) und das Werte Variablen zugewiesen werden.BlackJack hat geschrieben:Ich finde das Wort Variable(n) problematisch. Werte oder Objekte an Namen binden finde ich besser.
Stimmt.BlackJack hat geschrieben:Der erste Satz ist IMHO auch falsch denn es werden nicht mehreren Variablen mehrere Werte zugewiesen sondern mehreren Variablen wird jeweils *ein* Wert zugewiesen.
Das leuchtet mir ein.BlackJack hat geschrieben:Auf der rechten Seite steht auch nur *ein* Wert! Der kann ein beliebiges "iterable" sein, also zum Beispiel wie in Deinen Fällen ein Tupel. Es geht aber auch jedes andere Iterable das exakt so viele Elemente liefert wie Namen auf der linken Seite stehen. Zum Beispiel hätte man auch ``a, b = range(2)`` schreiben können. Der Titel ist IMHO auch unpassend. Unter Mehrfachzuweisung hätte ich das hier verstanden: ``a = b = 1``. Das was Du da machst läuft bei mir unter der Bezeichnung "sequence unpacking". Was wie oben schon angedeutet im Grunde auch zu einschränkend ist, weil jedes "iterable" verwendet werden kann, nicht nur solche die das Sequenz-Protokoll implementieren.
Ich werde also die Einleitung nochmal überabeiten, will das ganze aber nicht so stark vertiefen da dieser Artikel eher an Anfänger gerichtet ist. Daher auch das Gedankenexperiment.
Danke dir.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Führt aber zu Verwirrungen wie ich hier im Forum schon ganz, ganz oft gesehen habe. Daher finde auch ich die Bezeichnung Name und Objekt besser, vielleicht wäre es schon auch dazu einen Artikel zu haben?usepolt hat geschrieben:Das ist, denke ich, Ansichtssache. Variable(n) finde ich sehr aussagekräftig, zumal in den offiziellen Dokumentationen auch die rede von Variabl(en) und das Werte Variablen zugewiesen werden.BlackJack hat geschrieben:Ich finde das Wort Variable(n) problematisch. Werte oder Objekte an Namen binden finde ich besser.
Achja, und natürlich auch ein großes Lob für das Anlegen einer Wikiseite!
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Hallo Leonidas!
Ich werd mal schauen ob ich einen WikiArtikel zusammen kriege, dazu lese ich mich mal im Forum rum um ein paar Beispiele zu kriegen.
Hätte nicht gedacht das mit den Variablen doch so ein großes Thema ist. Ich persönlich finde die Name/Objekt-Geschichte irgendwie... gewöhnungsbedürftigLeonidas hat geschrieben:Führt aber zu Verwirrungen wie ich hier im Forum schon ganz, ganz oft gesehen habe. Daher finde auch ich die Bezeichnung Name und Objekt besser, vielleicht wäre es schon auch dazu einen Artikel zu haben?
Ich werd mal schauen ob ich einen WikiArtikel zusammen kriege, dazu lese ich mich mal im Forum rum um ein paar Beispiele zu kriegen.
Danke dirLeonidas hat geschrieben:Achja, und natürlich auch ein großes Lob für das Anlegen einer Wikiseite! Smile
Ist es auch nicht, es gibt nur 1, 2 Leute für die das ein Weltuntergang ist und es deswegen ständig jedem unter die Nase reiben müssen.usepolt hat geschrieben:Hätte nicht gedacht das mit den Variablen doch so ein großes Thema ist. Ich persönlich finde die Name/Objekt-Geschichte irgendwie... gewöhnungsbedürftig
Ich hatte mir vorhin eigentlich schon ein Kommentar dazu gespart, aber da das nochmal angesprochen wurde konnte ich mir das jetzt nicht mehr verkneifen.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Es geht halt um faktische Korrektheit die einem ermöglicht das Objektsystem deutlich besser zu verstehen als mit dem plumpen Begriff Variable, der sogar noch Speicherbereichskonnotationen mitträgt.Darii hat geschrieben:Ist es auch nicht, es gibt nur 1, 2 Leute für die das ein Weltuntergang ist und es deswegen ständig jedem unter die Nase reiben müssen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Es ist einfach nur so, dass sich Python genauso verhält wie jede andere x-beliebige Scriptsprache – sogar wie C wenn man mit Pointern arbeitet – und dass die Einführung neuer Begrifflichkeiten da irgendwelche Besonderheiten impliziert, die einfach nicht vorhanden ist.Leonidas hat geschrieben:Es geht halt um faktische Korrektheit die einem ermöglicht das Objektsystem deutlich besser zu verstehen als mit dem plumpen Begriff Variable, der sogar noch Speicherbereichskonnotationen mitträgt.
Die Begriffsdefinition von Wiki trifft es imo eigentlich ganz gut: Variable (programming), a symbolic name associated with a value and whose associated value may be changed
Was ist eurer Meinung nach die beste Art abzufragen ob ein Objekt iterierbar ist? Ich dachte da an try except:
Code: Alles auswählen
>>> def is_iterable(iterable) :
... try :
... iter(iterable)
... return True
... except TypeError :
... return False
...
>>> is_iterable(2)
False
>>> is_iterable("sdasdas")
True
>>> is_iterable((1,0))
True
>>>
Zuletzt geändert von usepolt am Freitag 23. April 2010, 15:06, insgesamt 1-mal geändert.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ja, dort würde ich auch eher von Namen sprechen als von Variablen.Darii hat geschrieben:Es ist einfach nur so, dass sich Python genauso verhält wie jede andere x-beliebige Scriptsprache
In C sind Variablen reservierte Bereiche im Speicher, das ist unter Python eben nicht so. Und das führt halt manchmal zu Verwirrungen.Darii hat geschrieben:sogar wie C wenn man mit Pointern arbeitet
@usepolt: mach dafür doch bitte einen neuen Thread auf, da es ja mit diesem nichts zu tun hat.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice