Gibt es einen logischen Unterschied zwischen 'nicht ==' und '! = (Ohne ist)

Gibt es einen wesentlichen Unterschied in Python 3.x zwischen:

for each_line in data_file: if each_line.find(":") != -1: #placeholder for code #more placeholder 

und

 for each_line in data: if not each_line.find(":") == -1: #placeholder for code #more placeholder 

Meine Frage ist nicht besonders auf die oben genannte Verwendung, sondern ist allgemeiner oder wesentlich – ist diese syntaktische Differenz auf eine andere Art und Weise, obwohl das Ergebnis das gleiche ist? Gibt es einen logischen Unterschied? Gibt es Aufgaben, wo man besser ist oder ist das nur ein stilistischer Unterschied? Wenn das nur stilistisch ist, welches von Python-Programmierern als sauberer angesehen wird?

Auch ist die obige eine entgegengesetzte Instanz zu fragen, was der Unterschied zwischen is und == ? Ist das erstere, wie das letztere, ein Unterschied der Objektidentität und der Objektwertgleichheit? Was ich meine, ist in meinem obigen Beispiel das is im Gebrauch not implizit?

3 Solutions collect form web for “Gibt es einen logischen Unterschied zwischen 'nicht ==' und '! = (Ohne ist)”

Wie ich es verstehe, funktionell sind sie nicht ganz gleich; Wenn du gegen eine Klasse verglichen hast, könnte die Klasse eine __ne__ haben, __ne__ die bei der Verwendung des Vergleichsoperators aufgerufen wird = = im Gegensatz zu __eq__ der bei Verwendung des Vergleichs == aufgerufen wird

Also, in diesem Fall,
not (a == b) nennen __eq__ auf a, mit b als das Argument, dann not das Ergebnis
(a != b) würde __ne__ auf a anrufen, mit b als Argument.

Ich würde die erste Methode verwenden (mit! =) Zum Vergleich

Je nachdem, ob Sie == oder != Verwenden, werden verschiedene Rich-Vergleichsmethoden aufgerufen.

 class EqTest(object): def __eq__(self, other): print "eq" return True def __ne__(self, other): print "ne" return False a = EqTest() b = EqTest() print not (a == b) # eq # False print a != b # ne # False 

Soweit ich weiß, bekommst du das gleiche Ergebnis für alle eingebauten Typen, aber theoretisch könnten sie unterschiedliche Implementierungen für einige benutzerdefinierte Objekte haben.

Ich würde verwenden != Anstatt not und == einfach weil es eine Operation statt zwei ist.

Ihr erstes Beispiel ist, wie Sie das Ergebnis der find testen sollten.

Ihr zweites Beispiel macht zu viel. Es wird zusätzlich ein Boolesches not auf das Ergebnis des each_line.find(":") == -1 .

In diesem Zusammenhang, wo Sie nicht verwenden wollen, ist, wenn Sie etwas haben, das Sie für Wahrheit oder Falschheit testen können.
Zum Beispiel wertet der leere String '' zu False aus:

 s = '' if not s: print('s is the empty string') 

Sie scheinen ein bisschen die Identitäts-Test-Ausdrücke zu verweisen und is not mit dem Booleschen not .

Ein Beispiel dafür, wie Sie einen Identitätstest durchführen:

 result_of_comparison = each_line.find(":") == -1 if result_of_comparison is False: # alternatively: is not True pass 
  • Können Sie neue Aussagen zur Python-Syntax hinzufügen?
  • Hat Python ein Äquivalent zu 'switch'?
  • Wenn Aussage mit zwei Bedingungen in Python
  • So geben Sie die vorherige Wahrscheinlichkeit für die Naive Bayes von scikit-learn an
  • Eine grundlegende Frage über "während wahr"
  • Wann sind Klammern um ein Tupel erforderlich?
  • Kommas in der Pythonschlange?
  • Python Wenn dann Else Stil, wenn man Werte aus Dicts
  • Bedeutung der Verwendung von Kommas und Unterstrichen mit Python-Zuweisungsoperator?
  • Python - gibt es ein "egal" -Symbol für Tupelaufgaben?
  • Was ist :: (Doppelkolon) in Python bei der Abrechnung von Sequenzen?
  • Python ist die beste Programmiersprache der Welt.