SORU
13 Mart 2013, ÇARŞAMBA


Ne zaman " = x" farklı " = x ben ben ben" Python mu?

= i = i standart gösterimde daha farklı etkileri olabileceği söylendi. Hangi i = 1 i = i 1 den daha farklı bir durum var mı?

CEVAP
13 Mart 2013, ÇARŞAMBA


Bu tamamen nesne üzerinde i bağlıdır.

= __add__ method çağrıları ise __iadd__ method eğer sakıncası yoksa mevcut değil mi __add__ geri düşen varsa () çağırır1.

Bir API bakış açısı, __iadd__ değişken nesneleri değiştirmek için kullanılan gerekiyorduyerde(mutasyona uğramış olan nesne döndürmek) __add__ oysa bir dönüş lazım ^em>yeni bir örnekbir şey. İçindeğişmeznesneler, her iki yöntem de yeni bir örneğini döndürür, ama __iadd__ eski örneği olduğu aynı ada sahip geçerli bir ad yeni bir örneğini koyacağız. Bu yüzden

i = 1
i  = 1

artım i. Gerçekte, yeni bir tamsayı olsun ve "" i -- eski tamsayı için. bir referans kaybetme üstüne ata Bu durumda, i = 1 i = i 1 tam olarak aynı. Ancak, çoğu değiştirilebilir nesnelerle, farklı bir hikaye

Somut bir örnek olarak:

a = [1, 2, 3]
b = a
b  = [1, 2, 3]
print a  #[1, 2, 3, 1, 2, 3]
print b  #[1, 2, 3, 1, 2, 3]

göre:

a = [1, 2, 3]
b = a
b = b   [1, 2, 3]
print a #[1, 2, 3]
print b #[1, 2, 3, 1, 2, 3]

fark ettiysen ilk örnek, beri b a referans aynı nesne için = b aslında değişiklikleri b (a gördüğü değişikliği de olsa bu başvuru aynı listede). Ben ne zaman ikinci durumda, ancak, b = b [1, 2, 3] b başvuran listesini alır ve yeni bir liste [1, 2, 3] ile birleştirir. Daha sonra b satır önce ne olduğunu önemsemeden 32* -- *geçerli ad sıralı listesi saklar.


1Bu anlatım x.__add__ uygulanmadı Eğer yoksa x.__add__(y) x y döner NotImplementedvex y farklı türleri vardıro zaman x y y.__radd__(x). aramayı dener Olduğu kadar, bu durumda

foo_instance = bar_instance

Foo __add__ __iadd__ sonra uygulamak değilse bile sonuç aynı burada olduğu gibi

foo_instance = bar_instance.__radd__(bar_instance,foo_instance)

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bokeh

    Bokeh

    9 HAZİRAN 2014
  • kylediablo

    kylediablo

    8 Ocak 2007
  • Smith Micro Graphics

    Smith Micro

    15 Mayıs 2008