Seite 1 von 2

Verfasst: Freitag 2. März 2007, 09:17
von Francesco
Joghurt hat geschrieben:Wie schon geschrieben machen "is" und "==" etwas anderes: Ein schönes Beispiel:

Code: Alles auswählen

>>> a = 50
>>> b = 50
>>> a is b
True
>>> a = 100
>>> b = 100
>>> a is b
False
(hier CPython, in Jython kann das noch ganz anders aussehen)
Würg, das ist ein Hammer. ;)
Wie soll man auf so etwas kommen, ohne sich genau zu informieren?
Intuitiv ist das nicht gerade.

Verfasst: Freitag 2. März 2007, 15:33
von Leonidas
Francesco hat geschrieben:Wie soll man auf so etwas kommen, ohne sich genau zu informieren?
Intuitiv ist das nicht gerade.
Darauf kommt man nicht. Wer testet schon ob eine Instanz der Int-Klasse gleich einer anderen (oder eben der gleichen) Instanz der Int-Klasse ist. Dafür gibt es ``==`` und sonst gibt es mit dieser Optimierung in echten Programmen keinerlei Probleme.

Verfasst: Freitag 2. März 2007, 15:44
von EyDu
Francesco hat geschrieben: Wie soll man auf so etwas kommen, ohne sich genau zu informieren?
Ich werde ja das Gefühl nicht los, dass einige Menschen versuchen Programiersprachen nur durch ausprobieren zu lernen und mit wenig Untersütztung von Literatur ... Aber wenn man mit solchen Feinheiten nicht in Kontakt kommt ist das ja auch in Ordnung. Immerhin braucht eine Sprache ja auch eine breite Basis.
Francesco hat geschrieben: Intuitiv ist das nicht gerade.
Wenn man den Unterschied von Objektgleichheit und Wertegleichheit kennt schon :D

Verfasst: Freitag 2. März 2007, 21:33
von BlackJack
Dem würde ich mich anschliessen. Das ``=`` eine Zuweisung und ``==`` ein Vergleich ist, ist auch nicht intuitiv. Oder ``lambda``. Closures. Klassen. Metaklassen. Sichtbarkeitsbereiche von Namen. Man muss halt Doku lesen wenn man wissen will was für eine Semantik hinter den Syntaxkonstrukten steckt.

Verfasst: Mittwoch 7. März 2007, 18:16
von Mad-Marty
weitere anmerkung zu == & is:

Code: Alles auswählen

>>> True is 1
False
>>> True == 1
True

Verfasst: Mittwoch 7. März 2007, 18:22
von nkoehring
Mad-Marty hat geschrieben:weitere anmerkung zu == & is:

Code: Alles auswählen

>>> True is 1
False
>>> True == 1
True
Ja, das funktioniert, weil in diesem Falle nicht auf Gleichheit sondern Gleichwertigkeit geprueft wird. Und True ist genauso wie 1 als Positiv (eben als True) zu werten ;)