[Python] 유용한 새로운 연산자! 바다코끼리 연산자 := (walrus operator)

반응형

From Pixabay InsaPictures's Image

 

Python 3.8부터 바다코끼리 연산자 (:=)가 도입되었습니다. 저도 최근에 알게 된, 매우 생소한 연산자입니다. 간단히 말해, 할당과 반환을 동시에 하는 연산자입니다. 개념과 목적, 예시를 알아보겠습니다.

 

Contents

    1. 개념

    변수 := 표현식

    작동하는 방식은 표현식의 결과를 변수에 할당하고, 동시에 반환합니다. 즉, 변수 = 표현식을 하고, return 변수 기능을 합니다.

     

    2. 목적

    할당과 반환을 동시에 함으로써, 코드량을 줄일 수 있습니다. 즉, 코드량이 줄어들면서 가독성이 높아지는 효과로 볼 수 있습니다.

     

    3. 예시

    1) 기초 예시

    ## 1번 코드 -> 일반 코드
    s='walrus eat kimchi' ## s에 문자열을 할당
    result = 'walrus' in s ## 'walrus' in s를 result에 할당
    if result: ## result가 True라면
        print(s) ## s 출력
        print(result) ## result 출력
    
    
    ## 2번 코드 -> := 사용
    ## s에 문자열을 할당하고, 'walrus' in s를 result에 할당하고, result가 True 라면
    if result := 'walrus' in (s := 'walrus eat kimchi'):
        print(s)  ## s 출력
        print(result) ## result 출력

    := (walrus operator)를 2번 사용하여 기초적인 예시를 만들었습니다. 일반 코드의 내용을 보면, s에 문자열을 할당하고, 거기에 'walrus'가 포함되는지 여부를 result에 할당하고, result가 True라면 s와 result를 출력하는 간단한 예제입니다.

     여기서 바다코끼리 연산자(walrus operator)를 쓰면 위의 5줄짜리 코드가 아래의 간단한 3줄 코드로 바뀝니다. (s := 'walrus eat kimchi') 이 부분이 s에 문자열을 할당함과 동시에 그 문자열을 반환합니다. 그 반환 값에 'walrus'가 포함되는지를 바로 검사하고, 또 그 결과를 바로 result에 할당합니다. 그리고 그 결과를 바로 반환하여 if문의 조건식으로 사용합니다.

    * 출력

     

    2) 활용 예시

    li=[] # 빈리스트 생성
    for i in range(10):
        if i==0:
            start=i # start에 초기값 할당
        if i==9:
            end=i # end에 마지막값 할당
        li.append(i) # 차례대로 리스트에 삽입
    print(li) # 리스트 출력
    print(start,end) # start, end 출력
    
    
    ## 리스트를 만듬과 동시에 i가 0일때 start에 0을 넣어주고, end에 값을 계속 넣어 마지막값역시 end에 할당
    li = [(end:=i) if i else (start:=i) for i in range(10)]
    print(li) # 리스트 출력
    print(start, end) # start, end 출력

    활용 예시는 리스트에 range(10)을 사용하여 0부터 9까지의 수를 넣고, 시작 값 0을 start에 할당, 마지막 값 9를 end에 할당하는 간단한 코드입니다. 이 예제 역시 := 연산자로 인해 코드량을 줄이고, 가독성을 높여주는 것만을 보이기 위한 예제입니다. 성능보단 연산자의 활용법을 보시는 게 좋습니다. 9줄의 코드를 3줄로 줄임과 동시에 가독성도 나름 한눈에 보이는 것을 알 수 있습니다.

    * 출력

     

    4. 생각해볼 점

    while문이나 함수와 함께 바다코끼리 연산자를 사용한다면, 할당과 반환을 동시에 하는 이점을 활용해서 짧고, 간단하며, 성능도 높여주는 코드를 짤 수 있다는 막연한 느낌이 듭니다. 나중에 그런 활용 사례를 발견한다면 또 한 번 유익한 포스팅으로 찾아오겠습니다. 이런 연산자가 생겨 정말 기쁩니다.

     

    읽어주셔서 감사합니다.

    오늘도 발전하는 모습이 멋지십니다.

    다음에 더 유익한 글로 찾아오겠습니다.

     

    * 위의 실습 코드는 아래 링크에 모두 정리되어 있습니다

     

    GitHub - netsus/python_practice: basic python course

    basic python course. Contribute to netsus/python_practice development by creating an account on GitHub.

    github.com

     

    Reference
    1. https://int-i.github.io/python/2020-05-29/python-walrus-operator/
    2. https://peps.python.org/pep-0572/

     

    반응형

    댓글

    Designed by JB FACTORY