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
반응형
'ChatGPT 아카이브 > Pandas' 카테고리의 다른 글
dropna() vs fillna() 비교 / NaN과 None의 차이 (0) | 2025.03.04 |
---|---|
drop_duplicates() 함수 파헤치기 (0) | 2025.03.04 |
.loc와 .iloc의 차이점/왜 둘은 모두 []를 사용할까?/loc와iloc가 데이터를 가져오는 과정 (0) | 2025.03.03 |
왜 Pandas는 2차원 리스트를 기본으로 사용할까? (0) | 2025.03.03 |
데이터프레임이 SQL보다 빠를까? (0) | 2025.03.03 |