prosource

+=의 정확한 기능은 무엇입니까?

probook 2023. 7. 2. 20:50
반응형

+=의 정확한 기능은 무엇입니까?

나는 무엇을 알아야 합니다.+=Python에서 수행합니다.그렇게 간단하다.또한 파이썬의 다른 속기 도구 정의에 대한 링크도 감사합니다.

파썬에서이,+=설탕 코팅을 위한 것입니까?__iadd__한 방법, 특한방법또, 는별▁special.__add__또는__radd__한다면__iadd__존재하지 않습니다.__iadd__수업의 방법은 원하는 모든 것을 할 수 있습니다.목록 개체는 이 개체를 구현하고 목록의 확장 메서드와 동일한 방법으로 각 요소를 자신에게 추가하는 반복 가능한 개체를 반복하는 데 사용합니다.

▁imp▁class를 구현하는 간단한 사용자 정의 가 있습니다.__iadd__수특방법한를 할 수 .+=연산자를 사용하여 숫자를 추가합니다.▁in▁▁a에 인쇄 문구를 __iadd__호출된다는 것을 보여주기 위해.또한.__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

+=변수의 값으로 다른 값을 추가하고 새 값을 변수에 할당합니다.

>>> 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 = []                 # 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__()method, 에 목록방, 안동+는 를호합다니를 합니다.__add__()하나. 그들은 목록으로 다른 일을 합니다.

왼쪽에 오른쪽 피연산자를 추가합니다. x += 2은 단입니다.x = x + 2

또한 목록에 요소를 추가할 수 있습니다. 이 SO 스레드를 참조하십시오.

일반적으로 a += b는 결과를 a에 저장하는 b에 "연결"합니다.이 간단한 설명은 += 연산자를 여러 언어로 설명합니다.

그러나 단순한 설명은 몇 가지 질문을 제기합니다.

  1. "추가"란 정확히 무엇을 의미합니까?
  2. python 변수는 객체에 대한 참조를 저장하는 값을 직접 저장하지 않습니다.

파이썬에서 이 두 가지 질문에 대한 대답은 a의 데이터 유형에 따라 달라집니다.


그렇다면 "추가"가 정확히 무엇을 의미할까요?

  • 숫자의 경우 숫자 추가를 의미합니다.
  • 목록, 튜플, 문자열 등의 경우 연결을 의미합니다.

+=가 +보다 유연한 목록의 경우 목록의 + 연산자에 다른 목록이 필요하지만 += 연산자는 반복 가능한 목록을 허용합니다.


그렇다면 "가치를 저장하는 것"은 무엇을 의미합니까?

개체가 변경 가능한 경우 수정 작업을 수행하도록 권장됩니다(필수는 아님).그래서 A는 이전과 동일한 개체를 가리키지만 현재는 다른 내용을 가지고 있습니다.

개체가 변경 불가능한 경우에는 수정을 수행할 수 없습니다.일부 가변 개체에는 인플레이스 "추가" 작업이 구현되어 있지 않을 수도 있습니다.이 경우 변수 "a"가 추가 작업의 결과를 포함하는 새 개체를 가리키도록 업데이트됩니다.

은▁for다▁looking를 찾는 것으로 됩니다.__IADD__첫째, 만약 그것이 시행되지 않는다면, 그때.__ADD__시도되고 마침내__RADD__.


python에서 +=를 사용할 때 정확한 유형이 확실하지 않은 변수, 특히 유형이 변형 가능한지 여부가 확실하지 않은 변수에 주의해야 합니다.다음 코드를 예로 들어 보겠습니다.

def dostuff(a):
    b = a
    a += (3,4)
    print(repr(a)+' '+repr(b))

dostuff((1,2))
dostuff([1,2])

우리가 튜플로 dostuff를 호출하면 튜플은 += 작업의 일부로 복사되어 sob은 영향을 받지 않습니다.그러나 목록과 함께 호출하면 목록이 제자리에서 수정되므로 a와 b가 모두 영향을 받습니다.

python 3에서는 "바이트" 및 "별 배열" 유형에서 유사한 동작이 관찰됩니다.


마지막으로 개체가 교체되지 않은 경우에도 재할당이 발생합니다.왼쪽이 단순한 변수인 경우에는 크게 문제가 되지 않지만 다음과 같은 변수 컬렉션을 참조하는 불변 컬렉션이 있는 경우에는 혼란스러운 동작을 일으킬 수 있습니다.

a = ([1,2],[3,4])
a[0] += [5]

이 경우 [5]가 [0]에 의해 참조되는 목록에 성공적으로 추가되지만 코드가 [0]을 재할당하려고 시도했다가 실패하면 예외가 발생합니다.

메모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

간단히 말하면.+="+=의 오른쪽에 있는 것을 +=의 왼쪽에 있는 변수에 추가"로 번역할 수 있습니다.

예. 만약 당신이 가지고 있다면.a = 10그리고나서a += 5다음과 같습니다.a = a + 5

그래서 "a"는 이제 15와 같습니다.

+=단지 쓰기 위한 지름길일 뿐입니다.

number = 4
number = number + 1

그래서 당신은 대신에 글을 쓸 것입니다.

numbers = 4
numbers += 1

두 가지 방법 모두 맞지만 예제 두 가지는 코드를 조금 덜 작성하는 데 도움이 됩니다.

문서에 따르면

x += y는 와동합다니등다에 합니다.x = operator.iadd(x, y)다른 말로 표현하자면,z = operator.iadd(x, y) 문 합니다.z = x; z += y.

그렇게x += 3는 와동합다니와 .x = x + 3.

x = 2

x += 3

print(x)

5를 출력합니다.

다음과 같은 것들도 마찬가지입니다.

이 CPython에 대해 에 대해 알아보겠습니다.x += y그리고.x = x = y따라 되는 언어 (예, 이것은구의만구언현는어정다제니의대개합공에념을한론의미현존되지하에))

>>> import dis
>>> dis.dis("x += y")
  1           0 LOAD_NAME                0 (x)
              2 LOAD_NAME                1 (y)
              4 INPLACE_ADD
              6 STORE_NAME               0 (x)
              8 LOAD_CONST               0 (None)
             10 RETURN_VALUE
>>> dis.dis("x = x + y")
  1           0 LOAD_NAME                0 (x)
              2 LOAD_NAME                1 (y)
              4 BINARY_ADD
              6 STORE_NAME               0 (x)
              8 LOAD_CONST               0 (None)
             10 RETURN_VALUE

둘 사이의 유일한 차이점은 연산자에 사용되는 바이트 코드입니다.INPLACE_ADD위해서+=,그리고.BINARY_ADD위해서+.

BINARY_ADD는 를사여구니다현을 하여 구현됩니다.x.__add__(또는)y.__radd__필요한 경우), 그래서x = x + y 거같의습다니와다와 .x = x.__add__(y).둘다요.__add__그리고.__radd__일반적으로 인수를 수정하지 않고 새 인스턴스를 반환합니다.

INPLACE_ADD는 를사여구니다현을 하여 구현됩니다.x.__iadd__존재하지 않는다면, 만약그존않는면다지하재이것,x.__add__대신 사용됩니다. x.__iadd__으로 일적으반환다니를 반환합니다.x결과가 나오도록STORE_NAME는 의참는변않습다니지경의 .x그 물체가 돌연변이를 일으켰을 수도 있지만요(실제로, 목적은.INPLACE_ADD항상 새 개체를 만드는 것이 아니라 개체를 변형시키는 방법을 제공하는 것입니다.)

를 들면, 들면를예,int.__iadd__정의되지 않았습니다.x += 7 때에x입니다.int는 와동합다니와 .x = x.__add__(y) 팅세xint.

에반면은,list.__iadd__정됨의, 따서라x += [7] 때에x입니다.list는 와동합다니와 .x = x.__iadd__([9]).list.__iadd__효과적으로 요구하는 것.extend의 끝에 주장의 요소를 추가합니다.x그것의 가치를 보는 것은 정말로 가능하지 않습니다.x 증강 과제 전후에x동일한 개체가 이름에 할당되었기 때문에 재할당되었습니다.

다른 사람들도 말했듯이 += 연산자는 바로 가기입니다.예:

var = 1;
var = var + 1;
#var = 2

또한 다음과 같이 작성할 수 있습니다.

var = 1;
var += 1;
#var = 2

그래서 첫 번째 예시를 쓰는 대신 두 번째 예시를 쓰면 됩니다. 잘 될 것입니다.

것을 하세요, 를 칠 마다, 2와 3을 어 들 오 당 계 래 된 산 기 에 서 그 리 고 당 신 기 요 것 세 하 억 그 이 것 을 했 합 던 때 를 을 칠 치 곤 마 다 의 신 ▁the ▁remember , ▁you 요 ▁to ▁when 예 ▁& ▁calcul ▁3 , ▁sum ▁time ▁2 와 ator 세 =당신은 총계에 3이 더해진 것을 볼 수 있습니다.+=비슷한 일을 합니다.예:

>>> orange = 2
>>> orange += 3
>>> print(orange)
5
>>> orange +=3
>>> print(orange)
8

정수가 여러 개인 +=를 사용하면 나타나지 않는 답변이 많이 보입니다.

한 가지 예:

x -= 1 + 3

이는 다음과 유사합니다.

x = x - (1 + 3)

다음이 아닌 경우:

x = (x - 1) + 3

기본적으로 (슬립) = (슬립) + x를 단순화한 것입니다. 예를 들어 다음과 같습니다.

num = num + 2

다음과 같습니까?

num += 2

+=변수를 두 할 때 .

긴 버전:

a = 10
a = a + 7
print(a)  # result is 17

짧은 버전:

a = 10
a += 7
print(a)  # result is 17

언급URL : https://stackoverflow.com/questions/4841436/what-exactly-does-do

반응형