2022년 5월 17일 화요일

파이썬 바다코끼리 (:=) 연산자 (python 3.8이상)

파이썬 3.8 부터 사용 가능한 바다 코끼리 연산자 “:=” 조건문 안에서는 값 인가하는 기능을 C에서는 원래 지원했던거고 python에서는 이 모호함 떄문에, if 조건안에서, 값의 assign을 허용하지 않는데, ( 실수로 == 를 =로 사용한 경우, 나중에 디버깅하기가 어려움 ) python에서는 이 불편함을 호소한 사람들이 여럿있었는지 “:=” 연산자로 3.8에서 추가가 되었다

형식은 다음과 같다

이름 := 표현식

len을 여러군데 사용하는 경우

a = ['apple', 'orange', 'banana', 'mango']
n = len(a)
if n > 5:
    print(f"List is too long ({n} elements, expected <= 5)")

a = ['apple', 'orange', 'banana', 'mango']
if (n:= len(a)) > 5:
    print(f"List is too long ({n} elements, expected <= 5)")

파일 처리

# 128byte씩 read

while True:
    chunk = file.read(128)
    if chunk:
        break
    doit(chunk)


while chunk := file.read(128)
    doit(chunk)

List안에서의 사용

위의 예시로 든 파일 Access등은 with 구문들로 사용하면 큰 불편함은 이전에도 없었고 이게 보통 정규식에서 match 사용할때, 이게 있었으면 좋겠다는 생각을 한적이 있었는데, 다행히도 3.8에서 이 구문을 추가해 주었다.

if match := re.match(aaa, line):
    return match.group(1)

이 문법은 여러줄 쓸 것을 한줄로 축약해주므로, 코드를 simple하게 유지하는데 유리하다. 개인적인 생각은 이런 syntax sugar의 경우, 잘 사용하면 적절하나, 코드수를 무조건 줄인다고, 남용하면 오히려 가독성에는 독이 되는 경우 들이 있으니, 상황에 맞게 잘 사용하는게 중요하다.