본문 바로가기
개발&프로그래밍

[python] 함수 작성법과 활용

by 재아군 2024. 11. 21.

[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)

함수 작성 팁

  1. 단일 책임 원칙

하나의 함수는 하나의 작업만 수행
함수 이름으로 기능을 명확히 표현

  1. 입력 검증
pythonCopydef divide\_numbers(a, b):  
if b == 0:  
raise ValueError("0으로 나눌 수 없습니다")  
return a / b
  1. 적절한 문서화
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

댓글