1. 함수의 기본 개념과 필요성
1.1 함수란 무엇인가?
함수는 특정 작업을 수행하는 코드 블록입니다. 마치 요리 레시피처럼 입력값을 받아 정해진 과정을 거쳐 결과를 반환합니다.
함수를 사용하는 주된 이유:
- 반복되는 코드를 줄여 생산성 향상
- 복잡한 문제를 작은 단위로 분해하여 가독성 개선
- 기능 수정 시 유지보수 용이
1.2 함수의 기본 구조
def 함수명(매개변수):
"""문서화 문자열 (Docstring)"""
실행 코드
return 반환값
예시: 간단한 덧셈 함수
def add(a, b):
"""두 수의 합을 계산하는 함수"""
return a + b
print(add(3, 5)) # 8 출력
2. 매개변수(Parameter)와 인자(Argument)의 차이
2.1 기본 개념
- 매개변수: 함수 정의 시 선언하는 변수 (예:
def func(x):
에서x
) - 인자: 함수 호출 시 전달하는 실제 값 (예:
func(5)
에서5
)
2.2 다양한 인자 전달 방식
2.2.1 위치 인자 (Positional Arguments)
인자의 순서대로 매개변수에 대입
def introduce(name, age):
print(f"{name}, {age}세")
introduce("김철수", 30) # "김철수, 30세" 출력
2.2.2 키워드 인자 (Keyword Arguments)
매개변수 이름을 직접 지정
introduce(age=25, name="이영희") # "이영희, 25세" 출력
2.2.3 기본값 매개변수 (Default Parameters)
인자를 전달하지 않을 때 사용할 기본값 설정
def order(item, quantity=1):
print(f"{item} {quantity}개 주문")
order("커피") # "커피 1개 주문"
order("케이크", 2) # "케이크 2개 주문"
3. 변수의 유효 범위(Scope)
3.1 지역 변수 vs 전역 변수
- 지역 변수: 함수 내부에서 선언, 외부에서 접근 불가
- 전역 변수: 함수 외부에서 선언, 모든 곳에서 접근 가능
global_var = "전역"
def test():
local_var = "지역"
print(global_var) # "전역" 출력 (접근 가능)
print(local_var) # "지역" 출력
test()
# print(local_var) # 오류 발생 (접근 불가)
3.2 global 키워드
전역 변수 수정 시 필수로 사용
count = 0
def increment():
global count
count += 1
increment()
print(count) # 1 출력
4. 고급 함수 활용 기법
4.1 람다 함수 (Lambda Expressions)
간단한 한 줄 함수 정의
square = lambda x: x ** 2
print(square(5)) # 25 출력
# 리스트 정렬에 활용
points = [(1, 3), (5, 1), (2, 4)]
points.sort(key=lambda p: p[1]) # y좌표 기준 정렬
print(points) # [(5, 1), (1, 3), (2, 4)]
4.2 가변 인자 처리
*args
: 여러 개의 위치 인자를 튜플로 받음**kwargs
: 여러 개의 키워드 인자를 딕셔너리로 받음
def print_args(*args):
for arg in args:
print(arg)
print_args(1, "A", True)
def print_kwargs(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_kwargs(name="홍길동", age=30)
5. 실전 프로젝트 예제
5.1 온도 변환기
def celsius_to_fahrenheit(c):
"""섭씨를 화씨로 변환"""
return (c * 9/5) + 32
def fahrenheit_to_celsius(f):
"""화씨를 섭씨로 변환"""
return (f - 32) * 5/9
print(f"25°C → {celsius_to_fahrenheit(25):.1f}°F") # 77.0°F
print(f"98.6°F → {fahrenheit_to_celsius(98.6):.1f}°C") # 37.0°C
5.2 간단한 로그인 시스템
def login(username, password):
"""사용자 인증 함수"""
users = {
"admin": "admin123",
"user1": "pass1234"
}
if users.get(username) == password:
return f"{username}님 환영합니다!"
return "로그인 실패"
print(login("admin", "admin123")) # 성공
print(login("user1", "wrongpass")) # 실패
6. 자주 발생하는 오류와 해결법
6.1 TypeError: missing required positional arguments
원인: 필수 매개변수에 인자 전달하지 않음
해결: 함수 정의 매개변수 개수 확인
6.2 UnboundLocalError
원인: 함수 내 지역 변수를 선언 전 사용
해결: 변수 초기화 또는 global
키워드 사용
6.3 RecursionError
원인: 종료 조건 없는 재귀 함수 호출
해결: 베이스 케이스 반드시 추가
7. 함수 작성 모범 사례
- 의미 있는 이름 사용:
calculate_tax()
(O) vsfunc1()
(X) - 한 함수에 한 기능: 복잡한 기능은 작은 함수로 분할
- 문서화 문자열 작성: Docstring으로 함수 설명 추가
- 예측 가능한 동작: 부작용(Side Effect) 최소화
'파이썬 (Python)' 카테고리의 다른 글
파이썬 함수 정의와 활용법: 코드 효율을 높이는 마법 (3) | 2025.02.02 |
---|---|
파이썬 반복문 쉽게 배우기! 초보자도 금방 이해하는 방법 (1) | 2025.02.01 |
파이썬 반복문 기초부터 활용까지: 초보자를 위한 가이드 (1) | 2025.01.31 |
파이썬 조건문 완벽 가이드: 초보자부터 실무 개발자까지 (0) | 2025.01.31 |
변수와 데이터 타입 완전 정복! 파이썬 기초 개념 쉽게 배우기 (1) | 2025.01.30 |