Python değilse == vs=!
Bu iki kod satırları arasında ne fark var
if not x == 'val':
ve
if x != 'val':
Biri diğerinden daha fazla etkilidir?
Kullanmak için daha iyi olurdu
if x == 'val':
pass
else:
CEVAP
dis
bayt kodunu iki sürümleri için oluşturulan bakmak için kullanma
not ==
4 0 LOAD_FAST 0 (foo)
3 LOAD_FAST 1 (bar)
6 COMPARE_OP 2 (==)
9 UNARY_NOT
10 RETURN_VALUE
!=
4 0 LOAD_FAST 0 (foo)
3 LOAD_FAST 1 (bar)
6 COMPARE_OP 3 (!=)
9 RETURN_VALUE
İkincisi daha az işlem vardır, ve bu nedenle biraz daha etkili olması muhtemeldir.
Olduğunu işaret etti in the commments (teşekkürler, @Quincunx) nerede var if foo != bar
vs if not foo == bar
sayı işlemleri tam olarak aynı, sadece COMPARE_OP
değişiklikler POP_JUMP_IF_TRUE
anahtarlar POP_JUMP_IF_FALSE
:
not ==
:
2 0 LOAD_FAST 0 (foo)
3 LOAD_FAST 1 (bar)
6 COMPARE_OP 2 (==)
9 POP_JUMP_IF_TRUE 16
!=
2 0 LOAD_FAST 0 (foo)
3 LOAD_FAST 1 (bar)
6 COMPARE_OP 3 (!=)
9 POP_JUMP_IF_FALSE 16
İş miktarı ve her bir karşılaştırma için gerekli bir fark olmadığı sürece, bu durumda, herhangi bir performans farkı görmek zordur.
Ancak, bu iki sürümleri unutmayınher zaman mantıksal olarak aynı olmayacaksöz konusu. nesneleri için __eq__
__ne__
uygulamalara bağlı olarak the data model documentation başına:
Karşılaştırma operatörleri arasında dolaylı ilişki vardır. Bu
x==y
gerçekx!=y
yanlış olduğu anlamına gelmez.
Örneğin:
>>> class Dummy(object):
def __eq__(self, other):
return True
def __ne__(self, other):
return True
>>> not Dummy() == Dummy()
False
>>> Dummy() != Dummy()
True
Son olarak, belki de en önemlisi: genel, iki yerdemantıksal olarak aynıdırx != y
not x == y
daha okunabilir.
Python değilse == vs=!...
Nasıl olursa item sırası önemli değils...
Alma python modül yolu...
Python kendisi silme nesne...
Python unicode dizesi aksan kaldırmak ...