Python'da + ='nin ne yaptığını bilmem gerekiyor. Bu kadar basit. Python'daki diğer kısa el aletlerinin tanımlarına olan bağlantıları da takdir ediyorum.
Python'da + ='nin ne yaptığını bilmem gerekiyor. Bu kadar basit. Python'daki diğer kısa el aletlerinin tanımlarına olan bağlantıları da takdir ediyorum.
Yanıtlar:
Python'da + =, __iadd__
özel yöntem için __add__
veya __radd__
yoksa __iadd__
mevcut değilse şeker kaplamadır . __iadd__
Bir sınıfın yöntem istediği her şeyi yapabilir. List nesnesi onu uygular ve listenin genişleme yönteminin yaptığı gibi her öğeyi kendisine ekleyen yinelenebilir bir nesne üzerinde yineleme yapmak için kullanır.
İşte __iadd__
özel yöntemi uygulayan basit bir özel sınıf . Nesneyi bir int ile başlatırsınız, ardından bir sayı eklemek için + = operatörünü kullanabilirsiniz. Çağrıldığını __iadd__
göstermek için içine bir baskı ifadesi ekledim . Ayrıca, __iadd__
bir nesneyi döndürmesi bekleniyor, bu yüzden kendisinin toplamasını ve bu durumda anlamlı olan diğer sayıyı döndürdüm.
>>> class Adder(object):
def __init__(self, num=0):
self.num = num
def __iadd__(self, other):
print 'in __iadd__', other
self.num = self.num + other
return self.num
>>> a = Adder(2)
>>> a += 3
in __iadd__ 3
>>> a
5
Bu yardımcı olur umarım.
__iadd__
farklı bir tür döndüren (kendisi eklenebilir) için -1
x += 5
x = x + 5
Python'da söylemekle tam olarak aynı değildir .
Buraya dikkat edin:
In [1]: x = [2,3,4]
In [2]: y = x
In [3]: x += 7,8,9
In [4]: x
Out[4]: [2, 3, 4, 7, 8, 9]
In [5]: y
Out[5]: [2, 3, 4, 7, 8, 9]
In [6]: x += [44,55]
In [7]: x
Out[7]: [2, 3, 4, 7, 8, 9, 44, 55]
In [8]: y
Out[8]: [2, 3, 4, 7, 8, 9, 44, 55]
In [9]: x = x + [33,22]
In [10]: x
Out[10]: [2, 3, 4, 7, 8, 9, 44, 55, 33, 22]
In [11]: y
Out[11]: [2, 3, 4, 7, 8, 9, 44, 55]
Referans için bakınız: + = neden listelerde beklenmedik şekilde davranıyor?
x += 7,8,9
+=
bir değişkene bir sayı ekler, işlem sırasında değişkenin kendisini değiştirir (oysa +
olmaz). Buna benzer şekilde, değişkeni de değiştiren aşağıdakiler vardır:
-=
, değişkenden bir değer çıkarır, değişkeni sonuca ayarlar*=
, değişkeni ve bir değeri çarpar, sonucu değişken yapar/=
, değişkeni değere bölerek sonucu değişken yapar%=
, değişken daha sonra onun sonucuna ayarlanarak değişken üzerinde modül gerçekleştirirBaşkaları da olabilir. Ben bir Python programcısı değilim.
&=
, >>=
vs.) ve ek matematik operatörleri ( **=
vb.)
Sağdaki operandı sola ekler. x += 2
anlamına geliyorx = x + 2
Ayrıca bir listeye öğeler ekleyebilir - bu SO başlığına bakın .
Bu sadece sözdizimsel bir kısayol değildir. Bunu dene:
x=[] # empty list
x += "something" # iterates over the string and appends to list
print(x) # ['s', 'o', 'm', 'e', 't', 'h', 'i', 'n', 'g']
karşı
x=[] # empty list
x = x + "something" # TypeError: can only concatenate list (not "str") to list
Bu, + = 'nin iadd list yöntemini çağırdığını, ancak +' nın listelerle farklı şeyler yapan add işlevini çağırdığını gösterir .
Kavramsal olarak a + = b, sonucu a'da depolayan a'ya b "ekler". Bu basit açıklama, + = operatörünü birçok dilde açıklayacaktır.
Bununla birlikte, basit açıklama birkaç soruyu gündeme getiriyor.
Python'da, bu soruların her ikisinin de cevabı a'nın veri türüne bağlıdır.
Peki "ekleme" tam olarak ne anlama geliyor?
+ = Listelerinin + 'dan daha esnek olduğunu, bir listedeki + operatörünün başka bir liste gerektirdiğini, ancak + = operatörünün yinelenebilir her şeyi kabul edeceğini unutmayın.
Öyleyse "değeri a'da saklamak" ne anlama geliyor?
Nesne değiştirilebilirse, değişikliği yerinde yapması teşvik edilir (ancak gerekli değildir). Yani a, daha önce yaptığı aynı nesneye işaret ediyor, ancak bu nesne artık farklı içeriğe sahip.
Nesne değişmez ise, o zaman açıkça değişikliği yerinde gerçekleştiremez. Bazı değiştirilebilir nesneler, yerinde "ekleme" işleminin bir uygulamasına da sahip olmayabilir. Bu durumda, "a" değişkeni, bir toplama işleminin sonucunu içeren yeni bir nesneyi işaret edecek şekilde güncellenecektir.
Teknik olarak bu, __IADD__
önce bakılarak gerçekleştirilir, uygulanmazsa __ADD__
denenir ve son olarak __RADD__
.
+ = 'Yi python'da, tam türünden emin olmadığımız ve özellikle türün değişken olup olmadığından emin olmadığımız değişkenler üzerinde kullanırken dikkatli olmak gerekir. Örneğin aşağıdaki kodu göz önünde bulundurun.
def dostuff(a):
b = a
a += (3,4)
print(repr(a)+' '+repr(b))
dostuff((1,2))
dostuff([1,2])
Bir tuple ile dostuff'ı çağırdığımızda, tuple + = işleminin bir parçası olarak kopyalanır ve böylece b etkilenmez. Ancak onu bir listeyle çağırdığımızda liste yerinde değiştirilir, bu nedenle hem a hem de b etkilenir.
Python 3'te "bayt" ve "baytearray" türlerinde benzer davranış gözlemlenir.
Son olarak, nesne değiştirilmese bile yeniden atamanın gerçekleştiğini unutmayın. Sol tarafın basitçe bir değişken olması çok da önemli değildir, ancak örneğin değiştirilebilir koleksiyonlara atıfta bulunan değişmez bir koleksiyonunuz olduğunda kafa karıştırıcı davranışlara neden olabilir:
a = ([1,2],[3,4])
a[0] += [5]
Bu durumda [5], [0] tarafından atıfta bulunulan listeye başarıyla eklenecektir, ancak daha sonra kod bir [0] atamayı denediğinde ve başarısız olduğunda bir istisna ortaya çıkacaktır.
Kısa cevap +=
"+ = 'nin sağındaki her şeyi + =' nin solundaki değişkene ekleyin" şeklinde tercüme edilebilir.
Ör. Eğer a = 10
öyleysea += 5
: a = a + 5
Yani, "a" şimdi 15'e eşit.
Not x += y
aynı değildir x = x + y
ek bir operatör nedeniyle dahildir bazı durumlarda operatör önceliği sağ taraf daima örneğin ilk değerlendirilir gerçeği ile birlikte
>>> x = 2
>>> x += 2 and 1
>>> x
3
>>> x = 2
>>> x = x + 2 and 1
>>> x
1
İlk durumun şu şekilde genişletildiğine dikkat edin:
>>> x = 2
>>> x = x + (2 and 1)
>>> x
3
Bununla 'gerçek dünyada' diğer operatörlerle karşılaşma olasılığınız daha yüksektir, örn.
x *= 2 + 1
== x = x * (2 + 1)
! =x = x * 2 + 1
+=
sadece yazmak için bir kısayol
number = 4
number = number + 1
Yani onun yerine yazarsın
numbers = 4
numbers += 1
Her iki yol da doğrudur ancak örnek iki, biraz daha az kod yazmanıza yardımcı olur
Diğerlerinin de söylediği gibi, + = operatörü bir kısayoldur. Bir örnek:
var = 1;
var = var + 1;
#var = 2
Şu şekilde de yazılabilir:
var = 1;
var += 1;
#var = 2
Yani ilk örneği yazmak yerine, sadece ikinci örneği yazabilirsiniz ki bu gayet iyi çalışacaktır.
Birden çok tam sayı ile + = kullanarak ortaya çıkmayan birçok yanıt görüyorum.
Bir örnek:
x -= 1 + 3
Bu şuna benzer olacaktır:
x = x - (1 + 3)
ve yok:
x = (x - 1) + 3
Belgelere göre
x += y
eşdeğerdirx = operator.iadd(x, y)
. Bunu ifade etmenin başka bir yolu, bununz = operator.iadd(x, y)
bileşik ifadeye eşdeğer olduğunu söylemektirz = x; z += y
.
Yani x += 3
aynıdır x = x + 3
.
x = 2
x += 3
print(x)
çıktı 5.
Dikkat edin de var
object.__iadd__