SORU
24 HAZİRAN 2015, ÇARŞAMBA


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
24 HAZİRAN 2015, ÇARŞAMBA


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çek x!=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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • apenney888

    apenney888

    27 EKİM 2010
  • gsmaestro

    gsmaestro

    17 AĞUSTOS 2006
  • TheMasterOfHell100

    TheMasterOfH

    13 AĞUSTOS 2011