Seite 1 von 1

Alles das gleiche oder doch nicht?

Verfasst: Donnerstag 26. April 2007, 15:30
von rolgal_reloaded
Hallo zusammen,

was sind die Unterschiede, sofern es welche gibt:

Code: Alles auswählen

>>> a, b = 34, 56
>>> a
34
>>> b
56

>>> (a, b) = (34, 56)
>>> a
34
>>> b
56

>>> a, b = (34, 56)
>>> a
34
>>> b
56
Vielen Dank im Voraus

LG

r_r

Verfasst: Donnerstag 26. April 2007, 15:48
von jens
Ich würde mal darauf Tippen das es keinen Unterschied gibt... Welchen auch?

Verfasst: Freitag 27. April 2007, 16:53
von mitsuhiko
Exakt das selbe

Verfasst: Freitag 27. April 2007, 19:46
von rolgal_reloaded
blackbird hat geschrieben:Exakt das selbe
Warum ich das frage:
KollegInnen von mir, die in der Schule in Zukunft auch Python verwenden wollen, haben sich sehr darüber gewundert, dass das alles das gleiche sein könnte.

Es gab dann noch eine Menge anderer Beispiele ähnlich dieser, die zur Verwunderung führten, dass das alles möglich ist und offensichtlich keinen Unterschied macht.
So z. Bsp. auch folgendes, oder doch nicht?

Code: Alles auswählen

>>> a, b = (1, 2), (3, 4)
>>> a
(1, 2)
>>> b
(3, 4)

>>> [a, b] = (1, 2), (3, 4)
>>> a
(1, 2)
>>> b
(3, 4)
>>> 
LG

r_r

Verfasst: Samstag 28. April 2007, 10:48
von jens
Ich glaube verwirrend ist evtl. das man einmal Tupel mit Rundenklammern macht, aber Rundeklammern gleichzeitig zum "Gruppieren" (bei Berechnungen) hergenommen werden. Das ist bei Listen und Dicts anders.

Diese doppelte Bedeutung ist eigentlich eine dumme Sache. Denn (12) ist kein Tupel, sondern nur 12, weil ein Komma fehlt. Es wird also erst zum Tuple, wenn man (12,) schreibt. Aber [12] ist eine Liste, dort braucht man kein Komma.

Man hätte vielleicht besser eine andere Klammer genommen. Das dumme ist nur, im ASCII Bereich gibt es nichts anderes mehr :( Man hätte vielleicht ein Tuple mit <12> machen könne, aber das ist auch doof, weil es ja auch für größer/kleiner steht.
rolgal_reloaded hat geschrieben:

Code: Alles auswählen

>>> [a, b] = (1, 2), (3, 4)
>>> a
(1, 2)
>>> b
(3, 4)
Das ist eigentlich klar. Denn die Liste [a, b] wird ja an keinem Namen gebunden. Was hättest du als Ergebnis erwartet?

Interessant finde ich allerdings folgendes:

Code: Alles auswählen

>>> c = [a, b] = (1, 2), (3, 4)
>>> a
(1, 2)
>>> b
(3, 4)
>>> c
((1, 2), (3, 4))
Spontan hätte ich gedacht, das c = [(1, 2), (3, 4)] ist. Denn wenn man es hintereinander macht, ist es so:

Code: Alles auswählen

>>> a, b = (1, 2), (3, 4)
>>> c = [a, b]
>>> c
[(1, 2), (3, 4)]
Dennoch ist das andere doch logisch. Denn bei c = [a, b] = (1, 2), (3, 4) sind halt alle drei Teile das selbe. Und c = (1, 2), (3, 4) ist das selbe wie c = ((1, 2), (3, 4))

Verfasst: Samstag 28. April 2007, 21:15
von birkenfeld

Code: Alles auswählen

[a, b] = iterable
ist ein Zugeständnis -- die Listenklammern haben auf der linken Seite einer Zuweisung genau die gleiche Bedeutung wie ein Tupel.

Ach ja, ist auch ein Tupel. Die Kommata machens aus!

Verfasst: Samstag 28. April 2007, 23:05
von mitsuhiko
Und dieses Komma erlaubt dann auch (ich weiß ich wiederhole mich ^^) den "Ein-Element Unpacking Operator":

Code: Alles auswählen

>>> a ,= [0]
>>> a
0
:wink:

Verfasst: Sonntag 29. April 2007, 08:31
von BlackJack
Diese "Doppelbedeutung" von Klammern ist aber nur in Ausnahmefällen eine, wie schon gesagt wurde machen die Kommata die Tupel und nur das leere Tupel braucht Klammern.

Bei anderen Tupeln schreibt man sie zum Gruppieren für den Vorrang, da haben sie die gleiche Funktion wie in der Arithmetik, oder "überflüssigerweise" um den Quelltext lesbarer zu gestalten.

Was die Verwunderung im Kollegenkreis angeht ─ sind die auch überrascht das Folgendes gleichwertig ist?

Code: Alles auswählen

(a + b) == (a + b)
 a + b  == (a + b)
(a + b) ==  a + b
Da haben die Klammern nämlich genau den selben Effekt wie im ersten Beitrag.

Verfasst: Sonntag 29. April 2007, 13:13
von rolgal_reloaded
BlackJack hat geschrieben:Diese "Doppelbedeutung" von Klammern ist aber nur in Ausnahmefällen eine, wie schon gesagt wurde machen die Kommata die Tupel und nur das leere Tupel braucht Klammern.

Bei anderen Tupeln schreibt man sie zum Gruppieren für den Vorrang, da haben sie die gleiche Funktion wie in der Arithmetik, oder "überflüssigerweise" um den Quelltext lesbarer zu gestalten.

Was die Verwunderung im Kollegenkreis angeht ─ sind die auch überrascht das Folgendes gleichwertig ist?

Code: Alles auswählen

(a + b) == (a + b)
 a + b  == (a + b)
(a + b) ==  a + b
Da haben die Klammern nämlich genau den selben Effekt wie im ersten Beitrag.
Muss ich sie fragen, keine Ahnung in wieweit sie inzwischen selbst mitlesen.

LG

rolgal_reloaded