본문 바로가기
SK 행복성장캠퍼스/Python 기초

0901_2일차_Python07_대입연산자

by NickNuma 2020. 9. 3.

대입 연산자, 말 그대로 어떤 변수에 데이터(값)을 대입해주는 겁니다.


앞 선, 산술연산자보다 훨씬 많습니다만. 그냥 대입연산자이기 때문에 겁먹을 필요는 없습니다.

"""
    대입 연산자

        n = 10 : 변수 n에 10을 저장

        n += 10 : 변수 n에 10을 더해서 다시 n에 저장
                  n = n + 10과 동일한 코드

        n -= 10 : 변수 n에 10을 빼서 다시 n에 저장
                  n = n - 10과 동일한 코드

        n *= 10 : 변수 n에 10을 곱해서 다시 n에 저장
                  n = n * 10과 동일한 코드

        n /= 10 : 변수 n에 10을 나눠서 다시 n에 저장
                  n = n / 10과 동일한 코드

        n %= 10 : 변수 n에 10을 나누어 나머지를 다시 n에 저장
                  n = n % 10과 동일한 코드

        n //= 10 : 변수 n에 10을 나누어 몫을 다시 n에 저장
                   n = n // 10과 동일한 코드

        n **= 10 : 변수 n에 10을 제곱하여 다시 n에 저장
                   n = n ** 10과 동일한 코드

"""

기본형인 n = 10이라는 대입연산자에 사칙연산의 기능을 합해놓은 것입니다. n += 10 -> n = n +10

진행 사항은 다 똑같은 이야기이기 때문에 간단하게 += 연산자만 살펴봅니다.

# 질문 : 변수 n에 정수 20을 더해서 다시 n 변수에 저장하는 코드를 작성하시오.
n = 10
#################
n += 20     # n = n + 20
#################
print(n)   #30

코드 실행 결과창을 따로 넣기도 애매해서 주석처리하였습니다.
참~ 쉽죠?


 


추가, 심화로, 대입연산자를 이용한 동시할당에 대해 알아봅니다.
+ 딕셔너리를 변수에 대입하면 어떻게 될까요?

"""
    대입 연산자
        1) 변수 = 변수2 = 변수3 = 값

        2) 반드시 갯수가 동일
            n, n2 = 값, 값2

        3) 갯수가 다른 경우    => Packing 방법 사용 => * 사용, 임의의 위치에 사용 가능, 1개의 변수에만 사용 가능 (*변수, 변수)
                                Packing 연산자 => *
            n, *n2 = 값, 값2, 값3    # 리스트 저장

        4) 딕셔너리 사용 가능
            x, y = { key : value, key2 : value2}
            ==> x와 y에는 딕셔너리의 key값이 저장된다.

"""

1일차 변수 시간에 동시할당을 배웠습니다만, 갯수가 다른 경우에는 어떻게 처리하는지 배우지 않았습니다.
갯수가 다를 때에는 * (속칭 별표, 아스테리스크(asterisk))를 이용하여 Packing을 해주어 동시할당을 해줄 수 있습니다.


 


하나의 데이터를 여러 변수에 동시 할당하거나 변수의 갯수와 데이터의 갯수가 동일할 때 에러없이 동시할당이 가능합니다.

#데이터 하나를 여러 변수에 동시 할당, 에러 없음
a = b = c = 10
print(a, b, c, type(a))

#갯수 동일, 에러 없음
n, n2 = 10, 20
print(n, n2, type(n))


 


하지만 변수의 갯수와 데이터의 갯수가 상이할 때는 Error가 발생합니다.
이때, 우리는 *를 이용하여 데이터를 Packing하고 Packing된 데이터를 하나의 변수에 넣어줌으로써 시스템 스스로 변수 갯수와 데이터 갯수를 동일하게 만들고, 동시할당이 가능해집니다.

#갯수 상이, 에러 발생      # Packing
r, *r2 = 10, 20, 30     # (10, 20, 30) 튜플형, ( 10, [20, 30] )
print(r, r2, type(r2))
print("=" * 40)

*x, y, z = "홍길동", "이순신", "세종", "정종", 1000
print(x, y, z)
x, *y, z = "홍길동", "이순신", "세종", "정종", 1000
print(x, y, z)
x, y, *z = "홍길동", "이순신", "세종", "정종", 1000
print(x, y, z)
print("=" * 40)

이때에 packing 없이 할당된 변수의 타입데이터의 타입형과 동일하고, packing 작업을 통해 할당된 변수의 타입[list형]이 됩니다.


 


마지막으로, dict, 딕셔너리형은 대입연산자 사용이 가능할까요? 결과값은 어떻게 나올까요?
2개 이상의 변수 2개 이상의 key 값을 갖은 딕셔너리 동시할당 시킬 수 있고 packing도 가능합니다.

"""
	4) 딕셔너리 사용 가능
            x, y = { key : value, key2 : value2}
            ==> x와 y에는 딕셔너리의 key값이 저장된다.

"""

k, k2 = {"name" : "홍길동", "age" : 20}
print(k, k2, type(k))    # key값만 str형으로 저장 -> name, age

k, *k2 = {"name" : "홍길동", "age" : 20, "gender" : "male"}
print(k, k2, type(k), type(k2))

딕셔너리형 데이터의 value은 제외하고 key값만 변수에 저장가능합니다. 이때 변수는 str형을 갖습니다.
*을 이용하여 packing한 값을 변수에 넣어줄 수도 있는데 이때는 [list]형의 값이 저장됩니다.


 

이렇게 대입연산자에 대해 알아봤습니다.

다음엔 비교연산자로 찾아뵙겠습니다.

고롬 이만~

반응형

댓글