Alles das gleiche oder doch nicht?

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.
Antworten
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

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
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich würde mal darauf Tippen das es keinen Unterschied gibt... Welchen auch?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Exakt das selbe
TUFKAB – the user formerly known as blackbird
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

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
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

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!
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

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:
TUFKAB – the user formerly known as blackbird
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.
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

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
Antworten