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

Alles das gleiche oder doch nicht?

Beitragvon rolgal_reloaded » Donnerstag 26. April 2007, 15:30

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
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 26. April 2007, 15:48

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

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

Beitragvon mitsuhiko » Freitag 27. April 2007, 16:53

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

Beitragvon rolgal_reloaded » Freitag 27. April 2007, 19:46

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
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Samstag 28. April 2007, 10:48

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

CMS in Python: http://www.pylucid.org
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

Beitragvon birkenfeld » Samstag 28. April 2007, 21:15

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/
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Samstag 28. April 2007, 23:05

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

Beitragvon BlackJack » Sonntag 29. April 2007, 08:31

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

Beitragvon rolgal_reloaded » Sonntag 29. April 2007, 13:13

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder