Python 바다코끼리 연산자 := 알아보기

:= 연산자는 바다코끼리(Walrus) 연산자로, Python 3.8에서 추가되었습니다.

이 연산자를 사용하면 표현식 안에서 변수에 값을 할당할 수 있습니다. 바다코끼리 연산자를 어떻게 활용할 수 있는지 예제와 함께 알아보겠습니다.

1. if문에서 := 연산자 사용하기

예를 들어, 사용자에게 숫자를 입력받아 양수인지 음수인지 판별하는 기능을 구현했습니다.

num = int(input("숫자를 입력하세요: "))
if num > 0:
    print(f"{num}은 양수입니다.")
else:
    print(f"{num}은 음수입니다.")

위 코드를 실행해서 10을 입력하면, 아래와 같이 num 변수에 10이 입력되고 양수라는 문자열을 출력됩니다.

숫자를 입력하세요: 10
10은 양수입니다.

만약 := 연산자를 이용하면 아래와 같이 if문 안에서 변수에 값을 대입하고 조건을 체크할 수 있습니다. 조금 더 짧은 코드로 같은 내용을 구현할 수 있습니다. 또한, 상황에 따라 다르지만 가독성이 좋은 경우가 있을 수 있습니다.

if (num := int(input("숫자를 입력하세요: "))) > 0:
    print(f"{num}은 양수입니다.")
else:
    print(f"{num}은 음수입니다.")

두번째 예제

index(val)은 리스트에 val이 있을 때 index를 리턴하며, 없으면 -1을 리턴합니다.

index 함수를 이용하여 아래와 같이 특정 요소의 index를 출력할 수 있습니다.

fruits = ['사과', '바나나', '딸기', '오렌지']

if (index := fruits.index('딸기')) != -1:
    print(f"딸기는 인덱스 {index}에 있습니다.")
else:
    print("딸기를 찾을 수 없습니다.")

Output:

딸기는 인덱스 2에 있습니다.

2. while문에서 := 연산자 사용하기

file.readline()은 파일에서 텍스트 1줄을 읽고 문자열로 리턴합니다. 파일의 끝까지 읽으면 empty string을 리턴합니다.

아래와 같이 while문에서 := 연산자와 readline() 함수로 문자열을 한줄 씩 읽고, 파일 끝에서 empty string이 리턴되면 while문을 탈출합니다.

with open('data.txt', 'r') as file:
    while line := file.readline():
        print(line.strip())

두번째 예제

while에서도 input 함수를 이용하여, 연속적으로 값을 입력받을 수 있습니다.

  • 아래 예제는 음수를 입력받으면 while을 탈출하도록 구현
while (x := int(input("숫자를 입력하세요: "))) != 0:
    if x < 0:
        print("음수를 입력하셨습니다. 반복문을 종료합니다.")
        break
    print(f"{x}은(는) 양수입니다.")

Output:

숫자를 입력하세요: 1
1은(는) 양수입니다.
숫자를 입력하세요: 2
2은(는) 양수입니다.
숫자를 입력하세요: 3
3은(는) 양수입니다.
숫자를 입력하세요: -1
음수를 입력하셨습니다. 반복문을 종료합니다.

3. List comprehension에서 := 연산자 사용하기

리스트의 요소들을 제곱한 결과가 30 미만일 때, 그 결과를 리스트로 리턴하는 코드를 구현하였습니다.

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
result = [(x * x) for x in numbers if (x * x) < 30]
print(result)

Output:

[1, 4, 9, 16, 25]

위 코드를 보면, (x * x) 연산이 두번 있는데, 아래와 같이 바다코끼리 연산자를 사용하면 중복된 부분을 제거할 수 있습니다.

  • (x * x)의 계산 결과를 바다코끼리 연산자를 사용하여 y에 대입하고, y를 리턴
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
result = [y for x in numbers if (y := (x * x)) < 30]
print(result)
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha