[Python] 패킹과 언패킹

반응형
    반응형

    파이썬에서의 패킹 언패킹을 설명하겠습니다. 

    일상생활에서 패킹을 포장한다는 의미로 많이 쓰고 있습니다.

    포장은 내용물을 보호하고자 내용물을 싸는 행위입니다.

    즉, 패킹은 내용물을 보호하려는 목적을 가지고 있습니다.

    그래서 파일 보호를 위해 복호화하여 파일분석을 어렵게 하는 경우를 패킹이라고 불리기도 합니다.

     

    그런데 파이썬에서는 싸는 행위에 더 초점을 맞춘 듯합니다. 

    파일 보호의 역할보다는 감싸는 역할로써 사용하고 있습니다.

     

     

    패킹

    파이썬에서의 패킹이란 여러 개의 값을 한 변수에 묶어 대입하는 것을 뜻합니다.

    예를 들어 1,2,3,4,5 를 하나의 변수로 묶는다면 다음과 같이 할 수 있습니다.

     

    num = 1,2,3,4,5

     

    print를 해보면 튜플로 출력을 합니다.

     

    print(num)

     

    언패킹

    반대로 언패킹묶여 있던 컬렉션에서 여러개의 변수로 나누는 것을 의미합니다.

    주의할 것은 컬렉션의 갯수만큼 변수 지정을 해주어야 하는 것입니다.

    필요한 것만 변수로 정하고 나머지는 그대로 두고 싶다면 별 기호(*)로 지정하면 됩니다. 

     

    심플하게 언패킹을 해보겠습니다.

     

    a,b,c,d,e = num
    print(a)
    print(b)
    print(c)
    print(d)
    print(e)

     

    변수 갯수가 다르게 지정한다면 오류가 발생합니다.

     

    a,b,c,d = num

     

    변수 일부만 지정 남은 대입요소 리스트 반환

     

    변수를 일부만 지정하고 싶다면 별 기호를 씁니다.

    앞에 3개만 지정하고 나머지는 제외시키겠습니다.

     

    a,b,c,*rest = num
    print(a)
    print(b)
    print(c)
    print(rest)

     

    별 기호를 쓰고 rest라 지정하면 나머지는 리스트로 지정됩니다. 

     

     

    남은 대입요소 표현

     

    관례적으로 필요없는 변수 표현은 밑줄 기호(_)로 표현합니다. 

    언패킹은 변수갯수가 맞아야 하므로 필요없는 갯수만큼 밑줄기호를 써줍니다.

     

    a,b,c,_,_ = num

     

     

    여러 변수 정의

     

    여러 변수 정의할 때 편리합니다.

     

    #여러 변수 정의
    x=10
    y=0
    z=5
    
    #언패킹 이용해 한줄로 정리
    x,y,z = 10,0,5

     

     

    응용

     

    파라미터에 데이터 간편하게 적용하기

     

    패킹,언패킹 개념에 별기호를 첨가하면 함수의 파라미터에 넣을 때 유용하게 쓸 수 있습니다.
    여러 파라미터를 갖는 함수를 다음과 같이 정의하면 보통 파라미터별로 하나의 데이터를 입력하게 됩니다.

     

    def add_book(name,age,height,weight):
        return '이름 :'+ str(name) + ' 나이 :'+ str(age) + ' 신장 :'+ str(height)+ ' 몸무게 :'+ str(weight)
        
    date = 'Terry',18,173,65
    
    add_book(date[0],date[1],date[2],date[3])

     

    별 기호를 사용하면 순서대로 대입을 해줘서 간편하게 대입할 수 있습니다.

     

    add_book(*date)

     

    남은 대입요소 

     

    함수에 남은 대입요소를 할 수 있도록 하겠습니다.

    필수 변수는 반드시 입력을 해야하지만 나머지는 안 해도 되는 경우입니다.

    정가를 만드는 함수를 만들었습니다. app_list에 숫자만 넣으면 자동으로 정가리스트가 나옵니다.

    def list_price(rate,*app_list):
        cal = (1+rate)*np.array(app_list)
        return list(cal)
        
    list_price(0.15,1000,2000,3000,4000)

     

    *app_list는 없어도 되는 요소이기 때문에 안 넣어도 오류없이 함수가 출력됩니다.

     

    list_price(0.15)

     

    관련 포스팅

     

    [Python/기초] - [Python] *args, **kwargs

    댓글

    Designed by JB FACTORY

    ....