레이블이 연산자인 게시물을 표시합니다. 모든 게시물 표시
레이블이 연산자인 게시물을 표시합니다. 모든 게시물 표시

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의 경우, 잘 사용하면 적절하나, 코드수를 무조건 줄인다고, 남용하면 오히려 가독성에는 독이 되는 경우 들이 있으니, 상황에 맞게 잘 사용하는게 중요하다.

2020년 2월 4일 화요일

파이썬 삼항 연산자


보통 C나 예전 언어들 보면 Ternary operator라고 삼항 연산자라는게 있다.

형식이 대략 아래와 같은데,
A ? B : C


파이썬에서는 위와 같이 ?(물음표)를 사용하지 않고

B if A else C


와 같은 형태로 guide를 하고 있다.

근데 이건 다른 언어들이랑 다르고 줄세우기 할때 가독성도 떨어지는데,,
아래와 같은 방법으로도 가능하다.

(C,B)[A]

튜플을 이용한 방법인데 참이면 1이므로 B, 거짓이면 0이므로 C를 선택하는 것이다.

그외에  A and B or C와 같이 short circuit구문을 이용하는 방법도 있는데,
이게 기존 다른언어의 삼항연산자들과 순서가 맞긴하다.

다만 이건 판정중에, B의 실제 값이 0인 경우 그 항이 False가 되면서
C가 실행되는 점이 있어서, 추천하지는 않는다.