본문 바로가기
ChatGPT 아카이브/Pandas

표현식(expression)과 할당문(statement) 둘 다 함수 return 값에 올 수 있을까? + 할당표현식( := )

by Nanki 2025. 3. 4.
def createBonusColumn(employees: pd.DataFrame) -> pd.DataFrame:
    return employees['bonus'] = employees['salary'] * 2

 

위 코드의 값 오류가 날까? 안날까?

 

오류발생!

 

오류가 발생하는 이유는 'employees['bonus'] = employees['salary'] * 2'의 반환값이 없기 때문이야.

🔍 문제의 원인

  • employees['bonus'] = employees['salary'] * 2 이 코드는 employees DataFrame에 'bonus' 컬럼을 추가하지만, 할당 연산 자체는 값을 반환하지 않아.
  • 따라서 return employees['bonus'] = employees['salary'] * 2는 구문 오류(SyntaxError) 가 발생해.

return에는 값을 반환할 수 있는 표현식(expression)이 들어가야 해. 하지만 employees['bonus'] = employees['salary'] * 2는 표현식이 아니라 문장(statement)이기 때문에 반환할 수 없어.

✅ 표현식(expression)과 할당문(statement)의 차이

가장 큰 차이는 값을 생성하느냐, 아니면 변수를 변경하느냐야.

1️⃣ 표현식 (Expression)

  • 값을 생성하고 반환할 수 있음.
  • return에 사용할 수 있음.
x = 10 + 5  # 10 + 5 자체가 값(15)을 생성하는 표현식
return 10 + 5  # 가능 (15 반환)
return x * 2  # 가능 (30 반환)

 

2️⃣ 할당문 (Assignment Statement)

  • 변수를 변경하지만, 값을 생성하지 않음.
  • return에 사용할 수 없음.
x = 10  # 변수 x에 10을 저장 (값을 반환하지 않음)
employees['bonus'] = employees['salary'] * 2  # employees에 새로운 열 추가 (반환값 없음)
return x = 10  # ❌ SyntaxError 발생
return employees['bonus'] = employees['salary'] * 2  # ❌ SyntaxError 발생

 

 

✅ 할당 표현식(:=)은 값을 반환할 수 있어!

Python 3.8부터 도입된 := (월러스 연산자)는 변수에 값을 할당하면서, 동시에 그 값을 반환할 수 있어.
즉, 할당문과 표현식의 특징을 동시에 가짐.

 

# 일반 할당문 (Statement)
x = 10  # 값을 할당하지만 반환하지 않음
return x = 10  # ❌ SyntaxError 발생

# 할당 표현식 (Expression)
return (x := 10)  # ✅ 가능! x에 10을 할당하면서, 10을 반환

 

🚀 :=을 쓰면 좋은 경우

반복문에서 조건 확인하면서 값 저장

while (line := input()) != "exit":  # 입력받은 값을 line에 저장하면서 조건 확인
    print(f"입력: {line}")

 

리스트 컴프리헨션에서 값 저장하면서 활용

numbers = [num for num in range(10) if (square := num ** 2) < 50]
print(numbers)  # square 값을 조건으로 사용하면서 저장

 

조건문에서 값 저장 후 재사용

if (length := len(my_list)) > 5:
    print(f"리스트 길이: {length}")

 

⚠ := 주의할 점

  • 할당 표현식은 변수에 값을 저장하는 동시에 반환할 뿐, 기존 할당문의 모든 용도를 대체하지는 않아.
  • 함수 매개변수에서는 := 사용 불가
  • 가독성이 나빠질 수 있으므로 짧은 범위에서만 사용하는 것이 좋음
def func(x := 10):  # ❌ SyntaxError
    pass
반응형