1. 파이썬 예제 코드: 함수
가. 기초 예시 코드 (5개)
함수의 정의, 호출, 매개변수 전달 및 결과 반환의 기본 원리를 익힙니다.
1. 가장 기본적인 함수 정의 및 호출
# 매개변수와 반환값이 없는 가장 단순한 형태의 함수입니다.
def say_hello():
"""'안녕하세요!'를 출력하는 함수"""
print("안녕하세요!")
# 함수 호출
say_hello()
2. 매개변수(Parameter)를 받는 함수
# 외부로부터 데이터를 전달받아 처리하는 함수입니다.
def greet(name):
"""이름을 받아 인사하는 함수"""
print(f"반갑습니다, {name}님!")
# 함수 호출
greet("홍길동")
greet("구운몽")
3. 반환 값(Return Value)이 있는 함수
# 계산 결과를 호출한 곳으로 되돌려주는 함수입니다.
def add(a, b):
"""두 숫자를 더한 결과를 반환하는 함수"""
return a + b
# 함수 호출 및 결과 저장
result = add(10, 5)
print(f"10 + 5 = {result}")
4. 여러 개의 매개변수와 반환 값
# 파이썬 함수는 콤마를 사용해 여러 값을 한꺼번에 반환할 수 있습니다.
def calculate_rectangle(width, height):
"""사각형의 넓이와 둘레를 계산하여 반환하는 함수"""
area = width * height
perimeter = 2 * (width + height)
return area, perimeter
# 함수 호출 및 결과 저장 (튜플 형태로 반환됨)
rect_area, rect_perimeter = calculate_rectangle(10, 20)
print(f"넓이: {rect_area}, 둘레: {rect_perimeter}")
5. 기본값 매개변수 (Default Parameter)
# 매개변수에 미리 값을 정해두면 호출 시 생략이 가능합니다.
def power(number, exponent=2):
"""숫자의 거듭제곱을 구하는 함수 (기본값은 제곱)"""
return number ** exponent
print(f"3의 제곱: {power(3)}") # exponent=2 사용
print(f"2의 10승: {power(2, 10)}") # exponent=10 사용
나. 응용 예시 코드 (4개)
가변 인자 처리, 람다 함수 등 함수를 더 유연하게 사용하는 방법을 다룹니다.
1. 가변 인자 (*args) 활용
# 몇 개의 인자가 들어올지 모를 때 유용합니다.
def sum_all(*args):
"""입력받은 모든 숫자의 합을 구하는 함수"""
total = 0
for num in args:
total += num
return total
print(f"합계: {sum_all(1, 2, 3, 4, 5)}")
2. 키워드 가변 인자 (**kwargs) 활용
# 인자 이름을 지정하여 딕셔너리 형태로 데이터를 받습니다.
def print_info(**kwargs):
"""사용자 정보를 출력하는 함수"""
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(이름="인수샘", 역할="선생님", 전공="파이썬")
3. 람다(Lambda) 함수
# 이름 없이 한 줄로 정의하는 익명 함수입니다.
# 일반 함수
def multiply(x, y): return x * y
# 람다 함수
lambda_multiply = lambda x, y: x * y
print(f"결과: {lambda_multiply(10, 20)}")
# 정렬 등에서 키로 활용
names = ["홍길동", "구운몽", "인수샘"]
names.sort(key=lambda x: len(x)) # 이름 길이순 정렬
print(f"정렬 결과: {names}")
4. 재귀 함수 (Recursive Function)
# 함수 내부에서 자기 자신을 호출하여 문제를 해결합니다.
def factorial(n):
"""팩토리얼을 구하는 재귀 함수"""
if n == 1:
return 1
return n * factorial(n - 1)
print(f"5! = {factorial(5)}")
다. 심화 예시 코드 (4개)
클로저, 데코레이터 등 함수 지향 프로그래밍의 핵심 심화 개념입니다.
1. 일급 객체로서의 함수
# 파이썬에서 함수는 변수에 담거나 다른 함수의 인자로 전달될 수 있습니다.
def apply_operation(func, x, y):
"""전달받은 함수(func)를 x, y에 적용하는 함수"""
return func(x, y)
def add(a, b): return a + b
def sub(a, b): return a - b
print(f"더하기 적용: {apply_operation(add, 10, 5)}")
print(f"빼기 적용: {apply_operation(sub, 10, 5)}")
2. 클로저 (Closure)
# 내부 함수가 외부 함수의 변수를 기억하고 있는 상태를 말합니다.
def outer_func(base_num):
"""바깥 함수: 기준 숫자를 기억"""
def inner_func(x):
"""안쪽 함수: 기준 숫자와 자신의 인자를 곱함"""
return base_num * x
return inner_func
# base_num(5)를 기억하는 함수가 반환됨
multiplier_by_5 = outer_func(5)
print(f"5 * 3 = {multiplier_by_5(3)}")
3. 데코레이터 (Decorator)
# 기존 함수의 코드를 수정하지 않고 기능을 추가할 때 사용합니다.
import time
def timer_decorator(original_func):
"""함수의 실행 시간을 측정하는 데코레이터"""
def wrapper(*args, **kwargs):
start_time = time.time()
result = original_func(*args, **kwargs)
end_time = time.time()
print(f"'{original_func.__name__}' 실행 시간: {end_time - start_time:.5f}초")
return result
return wrapper
@timer_decorator
def long_task(n):
"""합계를 구하는 작업 시뮬레이션"""
return sum(range(n))
long_task(1000000)
4. 제너레이터 (Generator)
# yield를 사용하여 데이터를 하나씩 생성하며 메모리를 절약합니다.
def number_generator(n):
"""0부터 n-1까지 숫자를 생성하는 제너레이터"""
for i in range(n):
yield i
for num in number_generator(5):
print(f"생성된 숫자: {num}")