04. Python 기초 — 함수
- 함수가 무엇이고 왜 쓰는지 안다
- 내장 함수와 직접 만든 함수(사용자 정의 함수)를 구분한다
- 람다(lambda), map, filter를 이해하고 간단히 쓴다
먼저: 함수가 뭔가요?
함수(function)는 입력을 받아 정해진 일을 하고 결과를 돌려주는, 이름 붙은 코드 묶음입니다. 자판기에 비유하면, 동전(입력)을 넣으면 음료(출력)가 나오는 것과 같습니다. 같은 작업을 여러 번 할 때, 매번 코드를 다시 쓰지 않고 함수 하나로 재사용합니다.
우리는 이미 함수를 써 왔습니다. print(), len(), int()가 전부 함수입니다.
내장 함수: 파이썬이 기본 제공
파이썬에 처음부터 들어 있는 함수를 내장 함수(built-in function)라 합니다. 자주 쓰는 것들:
nums = [3, 1, 4, 1, 5, 9] print(len(nums)) # 개수 print(sum(nums)) # 합계 print(max(nums)) # 최댓값 print(min(nums)) # 최솟값 print(sorted(nums)) # 정렬된 새 리스트
실행 결과:
6 23 9 1 [1, 1, 3, 4, 5, 9]
💡 팁: sum, max, min 같은 발상은 Pandas에서도 그대로 이어집니다. 데이터 한 열의 합계·최댓값을 구하는 일이 분석의 기본이니까요.
사용자 정의 함수: 내가 직접 만들기
def(define, 정의하다) 키워드로 나만의 함수를 만듭니다.
def greet(name): return f"안녕하세요, {name}님!" message = greet("철수") print(message)
실행 결과:
안녕하세요, 철수님!
구조를 뜯어보면:
def greet(name):—greet라는 이름의 함수를 정의.name은 입력(매개변수).return ...— 함수가 돌려줄 결과값.return한 값을 변수에 받아 쓸 수 있습니다.
🔑 새 용어
- 매개변수(parameter): 함수가 받는 입력 자리(
name).- 인자(argument): 실제로 넣어 준 값(
"철수").- 반환(return): 함수가 결과를 돌려주는 것.
return이 없으면 함수는None(아무것도 없음)을 돌려줍니다.
입력을 여러 개 받고 기본값 주기
def add_tax(price, rate=0.1): # rate는 기본값 0.1 return price * (1 + rate) print(add_tax(10000)) # rate 생략 → 기본값 0.1 사용 print(add_tax(10000, 0.2)) # rate를 0.2로 지정
실행 결과:
11000.0 12000.0
=값으로 미리 정해 두면, 호출할 때 생략 가능합니다. Pandas 함수들도 수많은 기본값을 갖고 있어서, 우리는 필요한 것만 바꿔 쓰면 됩니다.람다(lambda): 한 줄짜리 작은 함수
이름 붙일 필요 없는 아주 간단한 함수는 lambda로 한 줄에 만들 수 있습니다.
일반 함수:
def double(x): return x * 2
같은 것을 람다로:
double = lambda x: x * 2 print(double(5))
실행 결과:
10
읽는 법: lambda 입력: 결과. "x를 받아 x * 2를 돌려주는 함수."
💡 람다 자체를 변수에 담아 쓰는 일은 드뭅니다. 보통은 아래 map·filter나 Pandas의 apply처럼 "함수를 인자로 넘기는" 자리에서 즉석으로 씁니다. Pandas에서 한 열을 통째로 변환할 때 람다를 자주 만나게 됩니다.
map: 모든 요소에 함수 적용
map(함수, 목록)은 목록의 모든 요소에 함수를 적용한 결과를 만들어 줍니다.
nums = [1, 2, 3, 4] doubled = list(map(lambda x: x * 2, nums)) print(doubled)
실행 결과:
[2, 4, 6, 8]
읽는 법: "nums의 각 요소에 x*2를 적용해라." (map 결과는 list()로 감싸야 리스트로 보입니다.)
[x * 2 for x in nums]로도 똑같이 됩니다. 둘 다 알아두되, 입문 단계에선 읽기 쉬운 컴프리헨션을 더 권합니다.filter: 조건에 맞는 것만 거르기
filter(함수, 목록)은 함수가 True를 주는 요소만 남깁니다.
nums = [1, 2, 3, 4, 5, 6] evens = list(filter(lambda x: x % 2 == 0, nums)) print(evens)
실행 결과:
[2, 4, 6]
읽는 법: "nums에서 x가 짝수인(조건이 참인) 것만 걸러라."
| 도구 | 하는 일 | 컴프리헨션으로는 |
|---|---|---|
map(f, 목록) | 모든 요소를 변환 | [f(x) for x in 목록] |
filter(f, 목록) | 조건 맞는 것만 남김 | [x for x in 목록 if f(x)] |
🛠 미니 챌린지
- 섭씨를 화씨로 바꾸는 함수
c_to_f(c)를 만드세요. (화씨 = 섭씨 × 9/5 + 32).c_to_f(100)을 출력하세요. map을 써서[1, 2, 3, 4]의 각 요소를 제곱한 리스트를 만드세요.filter를 써서[15, 22, 8, 31, 4]에서 10보다 큰 수만 남기세요.
✅ 미니 챌린지 해설
# 1. 사용자 정의 함수 def c_to_f(c): return c * 9/5 + 32 print(c_to_f(100))
실행 결과: 212.0
# 2. map으로 제곱 nums = [1, 2, 3, 4] squares = list(map(lambda x: x ** 2, nums)) print(squares)
실행 결과: [1, 4, 9, 16]
# 3. filter로 10 초과만 nums = [15, 22, 8, 31, 4] big = list(filter(lambda x: x > 10, nums)) print(big)
실행 결과: [15, 22, 31]
이 장에서 배운 것
- 함수는 입력을 받아 일을 하고
return으로 결과를 돌려주는 재사용 가능한 코드 묶음이다. def 이름(매개변수):로 직접 함수를 만들고, 매개변수에 기본값을 줄 수 있다.lambda는 한 줄짜리 익명 함수로, 함수를 인자로 넘기는 자리에서 즉석으로 쓴다.map은 모든 요소 변환,filter는 조건에 맞는 요소만 남긴다.
✍️ 확인 문제
- 매개변수(parameter)와 인자(argument)의 차이는 무엇인가요?
- 함수에서
return을 쓰지 않으면 무엇이 반환되나요? filter(lambda x: x > 0, [-2, 3, -1, 5])의 결과는 무엇인가요?
Python 기초의 마지막입니다. 다음은 숫자 계산을 빠르게 해주는 NumPy로, Pandas의 토대가 되는 도구입니다.
👉 05. NumPy 기초