+ =가 파이썬에서 무엇을하는지 알아야합니다. 그렇게 간단합니다. 나는 또한 파이썬에서 다른 짧은 도구의 정의에 대한 링크를 고맙게 생각합니다.
+ =가 파이썬에서 무엇을하는지 알아야합니다. 그렇게 간단합니다. 나는 또한 파이썬에서 다른 짧은 도구의 정의에 대한 링크를 고맙게 생각합니다.
답변:
파이썬에서 + =는 __iadd__
특별한 방법에 대한 설탕 코팅 __add__
이거나 존재하지 않는 __radd__
경우 __iadd__
입니다. __iadd__
클래스 의 메소드는 원하는 모든 것을 할 수 있습니다. 목록 객체는이를 구현하고 목록의 extend 메소드와 동일한 방식으로 각 요소를 자체에 추가하는 반복 가능한 객체를 반복하는 데 사용합니다.
다음은 __iadd__
특수 메서드 를 구현하는 간단한 사용자 지정 클래스입니다 . int로 객체를 초기화 한 다음 + = 연산자를 사용하여 숫자를 추가 할 수 있습니다. __iadd__
호출 되는 것을 보여주기 위해 print 문을 추가했습니다 . 또한 __iadd__
객체를 반환 할 것으로 예상되므로이 경우에 의미가있는 다른 숫자와 함께 자신을 더한 값을 반환했습니다.
>>> 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
도움이 되었기를 바랍니다.
__iadd__
(자체 추가 가능한 인) 다른 유형을 반환
+=
변수의 값으로 다른 값을 추가하고 새 값을 변수에 할당합니다.
>>> x = 3
>>> x += 2
>>> print x
5
-=
, *=
, /=
뺄셈, 곱셈과 나눗셈 유사한다.
x += 5
x = x + 5
파이썬에서 말하는 것과 정확히 동일하지 않습니다 .
여기 참고 :
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]
x += 7,8,9
+=
변수에 숫자를 추가하여 프로세스에서 변수 자체를 변경합니다 (반면 +
). 이와 유사하게 변수를 수정하는 다음도 있습니다.
-=
, 변수에서 값을 빼서 변수를 결과로 설정합니다.*=
, 변수와 값을 곱하여 결과를 변수로 만듭니다./=
, 변수를 값으로 나누어 결과를 변수로 만듭니다.%=
, 변수에 대해 모듈러스를 수행하고 변수를 그 결과로 설정합니다.다른 것이있을 수 있습니다. 저는 파이썬 프로그래머가 아닙니다.
단순한 구문상의 지름길이 아닙니다. 이 시도:
x=[] # empty list
x += "something" # iterates over the string and appends to list
print(x) # ['s', 'o', 'm', 'e', 't', 'h', 'i', 'n', 'g']
대
x=[] # empty list
x = x + "something" # TypeError: can only concatenate list (not "str") to list
이것은 + =가 iadd 목록 메소드를 호출하지만 +는 목록과 다른 작업을 수행하는 add를 호출 한다는 것을 보여줍니다.
개념적으로 a + = b는 결과를 a에 저장하는 데 b를 "추가"합니다. 이 단순한 설명은 여러 언어로 + = 연산자를 설명합니다.
그러나 단순한 설명은 몇 가지 질문을 제기합니다.
파이썬에서이 두 질문에 대한 답은 a의 데이터 유형에 따라 다릅니다.
그렇다면 "추가"는 정확히 무엇을 의미합니까?
목록의 경우 + =가 +보다 더 유연하고 목록의 + 연산자에는 다른 목록이 필요하지만 + = 연산자는 모든 반복 가능 항목을 허용합니다.
그렇다면 "값을 a에 저장"한다는 것은 무엇을 의미합니까?
객체가 변경 가능하면 제자리에서 수정을 수행하는 것이 좋습니다 (필수는 아님). 따라서 이전에했던 것과 동일한 객체를 가리 키지 만 해당 객체는 이제 다른 내용을 갖습니다.
객체가 불변이면 분명히 제자리에서 수정을 수행 할 수 없습니다. 일부 변경 가능한 객체에는 내부 "추가"작업의 구현이 없을 수도 있습니다. 이 경우 변수 "a"는 추가 작업의 결과를 포함하는 새 개체를 가리 키도록 업데이트됩니다.
기술적으로 이것은 __IADD__
먼저 찾음으로써 구현되며 , 구현되지 않은 경우 __ADD__
시도되고 마지막으로 __RADD__
.
정확한 유형이 확실하지 않고 특히 유형이 변경 가능한지 여부가 확실하지 않은 변수에 파이썬에서 + =를 사용할 때는주의가 필요합니다. 예를 들어 다음 코드를 고려하십시오.
def dostuff(a):
b = a
a += (3,4)
print(repr(a)+' '+repr(b))
dostuff((1,2))
dostuff([1,2])
튜플을 사용하여 dostuff를 호출하면 튜플이 + = 연산의 일부로 복사되므로 b는 영향을받지 않습니다. 그러나 목록으로 호출하면 목록이 제자리에서 수정되므로 a와 b 모두 영향을받습니다.
Python 3에서는 "bytes"및 "bytearray"유형에서 유사한 동작이 관찰됩니다.
마지막으로 객체가 교체되지 않은 경우에도 재 할당이 발생합니다. 왼쪽이 단순히 변수 인 경우에는 그다지 중요하지 않지만 예를 들어 변경 가능한 컬렉션을 참조하는 변경 불가능한 컬렉션이있는 경우 혼란스러운 동작을 유발할 수 있습니다.
a = ([1,2],[3,4])
a[0] += [5]
이 경우 [5]는 a [0]이 참조하는 목록에 성공적으로 추가되지만 나중에 코드가 a [0]을 재 할당하려고 시도하고 실패하면 예외가 발생합니다.
짧은 대답은 +=
"+ =의 오른쪽에있는 모든 것을 + ="의 왼쪽에있는 변수에 추가하는 것으로 번역 될 수 있습니다.
전의. 그렇다면 a = 10
다음과 a += 5
같습니다. a = a + 5
따라서 "a"는 이제 15와 같습니다.
참고 x += y
로 동일하지 않은 x = x + y
부가 연산자로 인해 포함되는 일부 상황에서 운전자 우선 오른쪽 항상 예 먼저 평가된다는 사실과 함께
>>> x = 2
>>> x += 2 and 1
>>> x
3
>>> x = 2
>>> x = x + 2 and 1
>>> x
1
첫 번째 경우는 다음으로 확장됩니다.
>>> x = 2
>>> x = x + (2 and 1)
>>> x
3
다른 운영자와 '실제'에서이 문제를 만날 가능성이 더 높습니다.
x *= 2 + 1
== x = x * (2 + 1)
! =x = x * 2 + 1
다른 사람들도 말했듯이 + = 연산자는 바로 가기입니다. 예 :
var = 1;
var = var + 1;
#var = 2
다음과 같이 작성할 수도 있습니다.
var = 1;
var += 1;
#var = 2
따라서 첫 번째 예제를 작성하는 대신 두 번째 예제를 작성하면 잘 작동합니다.
object.__iadd__