Ich bin erst seit ungefähr einem Jahr in Python, aber mir wurde klar, dass ich nicht klar zwischen den Vergleichsoperatoren "is" und "==" unterscheiden konnte. Beschrieben als ein Gebot für mich.
is
ist Objektidentität
==
ist Objektgleichheit
Ist. Wie der Name schon sagt, bestimmt die Objektidentität, ob es sich um dasselbe Objekt handelt.
Andererseits hat ==
die gleiche Implementierung wie die Methode eq`.
Beispielsweise wird bestimmt, ob die Zeichenfolgen auch zwischen verschiedenen Objekten übereinstimmen oder nicht.
https://docs.python.org/3/reference/datamodel.html#object.eq
a = 'hoge'
print(a.__eq__('hoge')) # True
a = None
if a == None:
print('Not good')
Wenn es andererseits mit PEP8 übereinstimmt, wird Folgendes alarmiert.
E711 comparison to None should be 'if cond is Nond:'
Dies besagt, dass für Singletons wie None die Identität in Object Identity verglichen werden sollte. Daher ist es wünschenswert, wie folgt zu schreiben.
a = None
if a is None:
print('Good')
Wenn jedoch nicht eindeutig angegeben werden muss, dass es sich um None handelt, ist ↓ Pythonic. (3. Ich habe auch nebenbei geschrieben)
a = None
if not a:
print('Good')
Wenn beispielsweise "is" für den unten gezeigten Zeichenfolgenvergleich verwendet wird, kann dies nicht ordnungsgemäß ausgewertet werden.
Wenn Sie einen Vergleich durchführen möchten, z. B. übereinstimmende Zeichenfolgen, müssen Sie ==
verwenden.
(Auch beim Vergleich von Zeichenfolgen sollten Sie auf Unicode oder str achten.)
a = 'hoghoge'
if a is 'hogehoge':
print('This is not called!')
else:
print('This is called!')
if a:
Die if-Klausel wird auch häufig in Python verwendet.
das ist,
if a is not None:
Im Gegensatz zu a,
False
[]
None
''
0
Es bedeutet, dass es sich von jedem unterscheidet.
Wenn es besser ist, einen expliziten Vergleich mit diesen anzustellen,
wenn a nicht <Vergleichsziel> ist:
Wenn nicht,
if a:
OK.
Stellen Sie sicher, dass Sie die Verwendung verstehen und den richtigen Pythonic-Code schreiben.
Recommended Posts