본문 바로가기
Python

Python 기초 4장 - 함수(Functions) 완벽 가이드

by daddydontsleep 2024. 11. 27.
728x90
728x90

사진: UnsplashAndrea Davis

1.함수의 기본

함수는 특정 작업을 수행하는 코드 블록입니다. Python에서는 def 키워드로 함수를 정의합니다.

def greet(name):
    print(f"안녕하세요, {name}님!")

greet("철수")  # 출력: 안녕하세요, 철수님!

2.매개변수(Parameters)와 인자(Arguments)

위치 인자

def add(a, b):
    return a + b

result = add(3, 5)  # result = 8

위치 인자는 "순서"가 중요해요. 마치 줄 서기 처럼요!

def make_burger(patty, vegetable, sauce):
    print(f"{patty} 패티에 {vegetable}을 넣고 {sauce} 소스를 뿌립니다.")

# 순서대로 넣기
make_burger("불고기", "양상추", "마요네즈")

# 순서가 바뀌면 이상한 버거가 됩니다!
make_burger("마요네즈", "불고기", "양상추")  # 엉망진창 버거가 되었네요

키워드 인자

def profile(name, age, city):
    print(f"{name}님은 {city}에 사는 {age}살입니다.")

profile(age=25, city="서울", name="영희")

키워드 인자는 이름표를 붙이는 거예요. 순서가 바뀌어도 괜찮아요!

def order_pizza(size, topping, crust):
    print(f"{size} 크기의 {topping} 피자를 {crust} 도우로 주문했습니다.")

# 이름표를 붙여서 순서 걱정 없이!
order_pizza(
    topping="페퍼로니",
    size="라지",
    crust="씬"
)  # 라지 크기의 페퍼로니 피자를 씬 도우로 주문했습니다.

기본값 매개변수

def greet(name, greeting="안녕하세요"):
    print(f"{greeting}, {name}님!")

greet("민수")  # 기본값 사용
greet("지영", "좋은 아침")  # 기본값 오버라이드

3.반환값(Return)

def calculate_rectangle(width, height):
    area = width * height
    perimeter = 2 * (width + height)
    return area, perimeter  # 여러 값 반환

area, peri = calculate_rectangle(5, 3)

4.가변 인자(args, *kwargs)

가변 인자는 "몇 개가 들어올지 모르는" 인자를 처리할 수 있어요.

*args: 위치 인자 여러 개 받기

def sum_all(*numbers):
    return sum(numbers)

print(sum_all(1, 2, 3, 4, 5))  # 15
def make_fruit_salad(*fruits):
    print("과일 샐러드 재료:", end=" ")
    for fruit in fruits:
        print(fruit, end=" ")

# 재료를 원하는 만큼 넣을 수 있어요!
make_fruit_salad("사과")  # 1개
make_fruit_salad("사과", "바나나", "키위")  # 3개
make_fruit_salad("사과", "바나나", "키위", "망고", "파인애플")  # 5개

**kwargs: 키워드 인자 여러 개 받기

def print_info(**info):
    for key, value in info.items():
        print(f"{key}: {value}")

print_info(name="Aaron", age=30, job="개발자")
def print_game_info(**player_scores):
    print("🎮 게임 결과 🎮")
    for player, score in player_scores.items():
        print(f"{player}님: {score}점")

# 참가자 수에 상관없이 점수를 기록할 수 있어요!
print_game_info(철수=85, 영희=92)
print_game_info(철수=85, 영희=92, 민수=78, 지영=95)

5.람다 함수(Lambda)

⚠️ 이 글에서 사용되는 map(), filter() 함수는 아직 배우지 않은 내용입니다. 이후 챕터에서 자세히 다룰 예정이니 지금은 람다 함수의 개념 이해에만 집중해주세요!

람다 함수는 이름 없이 한 줄로 만드는 작은 함수입니다.

기본 문법

lambda 매개변수: 반환값

일반 함수와 비교

# 일반 함수
def square(x):
    return x ** 2

# 람다 함수
square = lambda x: x ** 2

numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))

실용적인 예제

  1. 리스트 정렬
students = [
    {"name": "영희", "score": 95},
    {"name": "철수", "score": 87},
    {"name": "민수", "score": 91}
]

# 점수로 정렬
sorted_students = sorted(students, key=lambda x: x["score"])
  1. map 함수와 함께 사용
numbers = [1, 2, 3, 4, 5]
squares = list(map(lambda x: x**2, numbers))  # [1, 4, 9, 16, 25]
  1. filter 함수와 함께 사용
ages = [15, 18, 21, 17, 25, 16]
adults = list(filter(lambda x: x >= 18, ages))  # [18, 21, 25]

람다는 간단한 연산을 할 때 코드를 더 간결하게 만들어줍니다.
하지만 복잡한 로직에는 일반 함수를 사용하는 것이 좋습니다.

6.함수 스코프(Scope)

global_var = 10

def function():
    local_var = 20
    print(global_var)  # 전역 변수 접근 가능
    print(local_var)   # 지역 변수

function()
print(global_var)      # 가능
# print(local_var)     # 오류! 지역 변수는 함수 밖에서 접근 불가

7.함수 활용 예제

계산기 프로그램

def calculator(num1, num2, operator):
    if operator == '+':
        return num1 + num2
    elif operator == '-':
        return num1 - num2
    elif operator == '*':
        return num1 * num2
    elif operator == '/':
        return num1 / num2 if num2 != 0 else "0으로 나눌 수 없습니다"

print(calculator(10, 5, '+'))  # 15
print(calculator(10, 5, '*'))  # 50

정리

  • 함수는 코드 재사용성과 모듈화의 기본
  • 매개변수와 반환값으로 유연한 함수 설계 가능
  • 다양한 인자 전달 방식 지원
  • 스코프를 통한 변수 관리
  • 람다로 간단한 익명 함수 생성 가능

💡 다음 장에서는 Python의 컬렉션(리스트, 튜플, 세트, 딕셔너리)에 대해 알아보겠습니다.

728x90
300x250