[neuerWikiArtikel] Mehrfachanweisungen (multiple assignment)

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Antworten
usepolt
User
Beiträge: 9
Registriert: Dienstag 20. April 2010, 10:29

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? :D Was kann man noch besser machen? Wo soll der Beitrag später mal hin?

Grüße
Zuletzt geändert von usepolt am Freitag 23. April 2010, 13:31, insgesamt 1-mal geändert.
BlackJack

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.
usepolt
User
Beiträge: 9
Registriert: Dienstag 20. April 2010, 10:29

Hallo BlackJack!
Danke für die schnelle Antwort.
BlackJack hat geschrieben:Ich finde das Wort Variable(n) problematisch. Werte oder Objekte an Namen binden finde ich besser.
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:Der erste Satz ist IMHO auch falsch denn es werden nicht mehreren Variablen mehrere Werte zugewiesen sondern mehreren Variablen wird jeweils *ein* Wert zugewiesen.
Stimmt.
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.
Das leuchtet mir ein.

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

usepolt hat geschrieben:
BlackJack hat geschrieben:Ich finde das Wort Variable(n) problematisch. Werte oder Objekte an Namen binden finde ich besser.
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.
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?

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
usepolt
User
Beiträge: 9
Registriert: Dienstag 20. April 2010, 10:29

Hallo Leonidas!
Leonidas 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?
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 :lol:
Ich werd mal schauen ob ich einen WikiArtikel zusammen kriege, dazu lese ich mich mal im Forum rum um ein paar Beispiele zu kriegen.
Leonidas hat geschrieben:Achja, und natürlich auch ein großes Lob für das Anlegen einer Wikiseite! Smile
Danke dir :D
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

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 :lol:
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.

Ich hatte mir vorhin eigentlich schon ein Kommentar dazu gespart, aber da das nochmal angesprochen wurde konnte ich mir das jetzt nicht mehr verkneifen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

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.
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.

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
usepolt
User
Beiträge: 9
Registriert: Dienstag 20. April 2010, 10:29

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Darii hat geschrieben:Es ist einfach nur so, dass sich Python genauso verhält wie jede andere x-beliebige Scriptsprache
Ja, dort würde ich auch eher von Namen sprechen als von Variablen.
Darii hat geschrieben:sogar wie C wenn man mit Pointern arbeitet
In C sind Variablen reservierte Bereiche im Speicher, das ist unter Python eben nicht so. Und das führt halt manchmal zu Verwirrungen.

@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
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Ab Python 2.6 würde ich naiv sagen isinstance(obj, collections.Iterable)
usepolt
User
Beiträge: 9
Registriert: Dienstag 20. April 2010, 10:29

Abfrage ob ein Objekt iterierbar ist

http://www.python-forum.de/post-167919.html
Antworten