[Python] 함수 작성법과 활용
Python에서 함수는 코드의 재사용성과 가독성을 높이는 핵심 요소다.
함수의 기본 개념부터 실전 활용법까지 알아보자.
함수 정의와 호출
기본 함수 정의
# 기본적인 함수 정의
def greet():
print("Hello, World!")
# 함수 호출
greet() # 출력: Hello, World!
# 값을 반환하는 함수
def get_greeting():
return "Hello, World!"
message = get_greeting()
print(message)
함수 설명 작성
def calculate_average(numbers):
"""
숫자 리스트의 평균을 계산합니다.
Args:
numbers (list): 숫자들의 리스트
Returns:
float: 평균값
"""
return sum(numbers) / len(numbers)
매개변수와 반환값
다양한 매개변수 활용
# 여러 매개변수 사용
def greet_person(name, age):
return f"Hello, {name}! You are {age} years old."
# 여러 값 반환
def get_user_info():
name = "John"
age = 30
city = "New York"
return name, age, city
# 반환값 받기
name, age, city = get_user_info()
가변 매개변수
# 여러 인자 받기 (*args)
def sum_all(*numbers):
return sum(numbers)
result = sum_all(1, 2, 3, 4, 5) # 15
# 키워드 인자 받기 (**kwargs)
def print_info(**info):
for key, value in info.items():
print(f"{key}: {value}")
print_info(name="John", age=30, city="New York")
기본값과 키워드 인자
기본값 설정
def greet_user(name="User", greeting="Hello"):
return f"{greeting}, {name}!"
# 다양한 호출 방법
print(greet_user()) # Hello, User!
print(greet_user("John")) # Hello, John!
print(greet_user("John", "Hi")) # Hi, John!
키워드 인자 활용
def create_profile(name, age, city="Unknown", country="Unknown"):
return {
"name": name,
"age": age,
"city": city,
"country": country
}
# 키워드 인자로 호출
profile = create_profile(
name="Alice",
age=25,
country="USA" # city는 기본값 사용
)
람다 함수 소개
기본 람다 함수
# 일반 함수
def double(x):
return x * 2
# 같은 기능의 람다 함수
double_lambda = lambda x: x * 2
# 사용 예
print(double(5)) # 10
print(double_lambda(5)) # 10
람다 함수 활용
# 리스트 정렬에 활용
people = [
{"name": "John", "age": 30},
{"name": "Alice", "age": 25},
{"name": "Bob", "age": 35}
]
# 나이순 정렬
sorted_people = sorted(people, key=lambda x: x["age"])
# map과 함께 사용
numbers = [1, 2, 3, 4, 5]
squares = list(map(lambda x: x**2, numbers))
실전 활용 예제
데코레이터 함수
def timer_decorator(func):
def wrapper(*args, **kwargs):
import time
start = time.time()
result = func(*args, **kwargs)
end = time.time()
print(f"{func.__name__} 실행 시간: {end - start:.2f}초")
return result
return wrapper
@timer_decorator
def long_running_function():
import time
time.sleep(2)
return "작업 완료"
콜백 함수
def process_data(data, success_callback, error_callback):
try:
result = data * 2
success_callback(result)
except Exception as e:
error_callback(str(e))
# 콜백 함수 정의
def on_success(result):
print(f"성공: {result}")
def on_error(error):
print(f"에러: {error}")
# 함수 사용
process_data(5, on_success, on_error)
재귀 함수
def factorial(n):
"""
재귀를 사용한 팩토리얼 계산
"""
if n <= 1:
return 1
return n * factorial(n - 1)
def fibonacci(n):
"""
재귀를 사용한 피보나치 수열
"""
if n <= 1:
return n
return fibonacci(n-1) + fibonacci(n-2)
함수 작성 팁
- 단일 책임 원칙
하나의 함수는 하나의 작업만 수행
함수 이름으로 기능을 명확히 표현
- 입력 검증
pythonCopydef divide\_numbers(a, b):
if b == 0:
raise ValueError("0으로 나눌 수 없습니다")
return a / b
- 적절한 문서화
pythonCopydef complex\_operation(data, threshold=0.5):
"""
데이터를 처리하고 결과를 반환합니다.
Args:
data (list): 처리할 데이터 리스트
threshold (float): 임계값 (기본값: 0.5)
Returns:
list: 처리된 데이터
Raises:
ValueError: 데이터가 비어있는 경우
"""
if not data:
raise ValueError("데이터가 비어있습니다")
# 처리 로직
return processed\_data
'개발&프로그래밍' 카테고리의 다른 글
[Python] for문과 while문 실전 활용 (0) | 2024.11.23 |
---|---|
[Python] 에러와 예외 처리 기초 (1) | 2024.11.22 |
[python] 파일 입출력 기초 가이드 (1) | 2024.11.20 |
[python] 리스트와 딕셔너리 완벽 이해하기 (0) | 2024.11.20 |
[Python] Matplotlib으로 데이터 시각화하기 (0) | 2024.11.19 |
댓글