Ich habe bemerkt, dass ein Python-Skript, das ich geschrieben habe, nicht richtig funktioniert, und habe es auf eine Endlosschleife zurückgeführt, deren Bedingung war while line is not ''
. Bei der Überprüfung im Debugger stellte sich heraus, dass diese Zeile in der Tat ''
. Als ich es in !=''
statt is not ''
hat es gut funktioniert.
Ist es außerdem generell besser, standardmäßig nur '==' zu verwenden, auch beim Vergleich von int- oder booleschen Werten? Ich habe immer gerne 'is' verwendet, weil ich es ästhetisch ansprechender und pythonischer finde (so bin ich in diese Falle getappt...), aber ich frage mich, ob es nur für den Fall reserviert werden soll, dass man zwei Objekte mit der gleichen id finden will.
3 Stimmen
Inwiefern widerspricht dies Ihren Erfahrungen? NaN ist das einzige eingebaute Gegenbeispiel; Sie verstehen die Richtungsbeziehungen einfach falsch. Die Spezifikation sagt "Für alle eingebauten Python-Objekte (wie Strings, Listen, Dicts, Funktionen, etc.) gilt: Wenn x gleich y ist, dann ist x==y auch wahr.", nicht "Für alle eingebauten Python-Objekte (wie Strings, Listen, Dicts, Funktionen, etc.) gilt: Wenn x==y ist, dann ist x gleich y auch wahr." Aus irgendeinem Grund tust du so, als ob das Letztere hier steht. Das tut es aber nicht. Sie sehen, dass Gleichheit übereinstimmt, aber nicht wahr ist. Das ist nach der oben zitierten Aussage durchaus zulässig.
0 Stimmen
Ja. Ich habe das völlig durcheinander gelesen. Ich habe es aus der Frage herausgenommen, weil ich nicht glaube, dass es für künftige Leser von Nutzen sein wird.
2 Stimmen
O1 ist o2 => vergleicht, ob o1 und o2 auf dieselbe physische Stelle im Speicher zeigen (mit anderen Worten, ob sie dasselbe Objekt sind). Während, o1 == o2 => hier ruft Python die Methode __cmp__(o2) von o1 auf, die idealerweise den Wert vergleicht und True oder False zurückgibt. (Mit anderen Worten, es vergleicht den Wert) Für JAVA Leute: In Java kann man mit str1 == str2 feststellen, ob zwei String-Variablen auf denselben physischen Speicherplatz verweisen (dies wird Objektidentität genannt und in Python als str1 ist str2 geschrieben). Um String-Werte in Java zu vergleichen, verwendet man str1.equals(str2); in Python verwendet man str1 == str2.