8. 함수

드디어 코딩의 꽃인 함수는 특정 작업을 수행하는 코드 블록으로, 코드의 재사용성과 가독성을 높이는 데 매우 유용합니다. 파이썬에서 함수는 def 키워드를 사용하여 정의하며, 필요에 따라 매개변수를 전달받고 결과를 반환할 수 있습니다. 이 장에서는 함수의 정의와 사용법을 배워보겠습니다.

8.1 함수 정의하기

함수를 정의하려면 def 키워드를 사용하고, 함수 이름과 괄호 ()를 작성한 후 콜론 :을 붙입니다. 함수 내부 코드는 들여쓰기를 사용하여 작성합니다.

# 간단한 함수 정의 예제
def greet():
    print("안녕하세요!")

# 함수 호출
greet()

출력 결과:

안녕하세요!

8.2 매개변수가 있는 함수

“매개변수” 라는 단어를 처음 접하면 굉장히 생소합니다. 간단히 말해서, 함수의 입력값 혹은 인풋이라고 생각하면 이해하기가 편합니다. 함수에 매개변수를 정의하여 외부로부터 값을 전달받을 수 있습니다. 매개변수는 괄호 안에 정의하는데, 밑의 예시를 보면 더 직관적으로 이해할 수 있습니다.

def greet_user(name): # 여기서 name 이 매개변수 입니다.
    print(f"안녕하세요, {name}님!")

# 함수 호출
greet_user("철수") # 매개변수에 "철수" 를 사용했습니다

출력 결과:

안녕하세요, 철수님!

8.3 반환값이 있는 함수

함수에 return 이라는 키워드를 사용한다면 그 함수는 반환값이 있다고 합니다. return 키워드는 이 함수를 호출한 곳으로 값을 “반환” 하고 싶을때 사용합니다. 이게 도대체 무슨 말인지 밑의 예시를 보고 알아봅시다.

def add_without_return(a, b):
    result = a + b # a 변수와 b 변수에 있는 값을 result 라는 변수에 저장해줘
    print(result) # result 변수에 있는 값을 출력해줘

total = add_without_return(3, 5) # return 값이 없기 때문에 total 이라는 변수에 아무 값도 저장이 안됨
print(total) # None 출력

# 두 수의 합을 반환하는 함수 예제
def add(a, b):
    result = a + b # a 변수와 b 변수에 있는 값을 result 라는 변수에 저장해줘
    print(result) # result 변수에 있는 값을 출력해줘
    return result # result 변수에 있는 값을 반환해줘

total = add(3, 5) # return 값이 있던 덕분에 total 이라는 변수에 결과 값이 저장 됨
print(total) # 8 출력

8.4 기본값이 있는 매개변수

함수 매개변수에 기본값을 지정하면, 함수 호출 시 해당 매개변수를 생략할 수 있습니다. 기본값이 없는 매개변수는 반드시 값을 전달해야 합니다.

# 기본값이 있는 매개변수 예제
def greet_user(name, greeting="안녕하세요"):
    print(f"{greeting}, {name}님!")

# 함수 호출
greet_user("영희") # greeting 이라는 매개 변수에 대한 값을 지정하는 것을 생략함
greet_user("민수", "환영합니다") # greeting 이라는 매개 변수에 "환영합니다" 라는 값을 사용함

출력 결과:

안녕하세요, 영희님!
환영합니다, 민수님!

자, 여기까지만 하고 다음 다음 챕터로 넘어가도 됩니다. 이 밑에서는 좀 더 파이썬 함수의 고급 개념을 다루는데, 실전에서 많이 쓰이지만 파이썬을 처음 배우는 사람이 반드시 처음부터 알아야 할 내용은 아닙니다. 어려우면 대충 스윽 보고 나중에 다시 돌아와도 문제 없습니다.


8.5 가변 매개변수

함수에 전달할 인자의 개수가 가변적인 경우, *args 또는 **kwargs를 사용하여 여러 개의 인자를 처리할 수 있습니다.

  • *args: 위치 인자를 튜플 형태로 전달받습니다.
  • ****kwargs**: 키워드 인자를 딕셔너리 형태로 전달받습니다.
# 가변 매개변수 예제
def print_numbers(*args):
    for number in args:
        print(number)

print_numbers(1, 2, 3, 4, 5)

출력 결과:

1
2
3
4
5
# 키워드 인자를 사용하는 가변 매개변수 예제
def print_user_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_user_info(name="철수", age=15, city="서울")

출력 결과:

name: 철수
age: 15
city: 서울

8.6 람다 함수

람다 함수는 이름이 없는 익명 함수로, 간단한 기능을 한 줄로 작성할 때 사용됩니다. lambda 키워드를 사용하여 정의합니다.

# 람다 함수 예제
add = lambda x, y: x + y
print(add(3, 5))

출력 결과:

8

같은 함수를 람다 함수가 아닌 방식으로 정의하면 이렇게 되겠죠?

def add(x, y):
    return x + y

람다 함수는 주로 짧은 함수를 정의할 때 유용하며, 다른 함수의 인자로 전달할 때 자주 사용됩니다.

8.7 예제: 계산기 함수 만들기

여러 개의 계산 기능을 가진 간단한 계산기 함수를 만들어 보겠습니다.

# 계산기 함수 예제
def calculator(a, b, operation):
    if operation == "add":
        return a + b
    elif operation == "subtract":
        return a - b
    elif operation == "multiply":
        return a * b
    elif operation == "divide":
        if b != 0:
            return a / b
        else:
            return "0으로 나눌 수 없습니다."
    else:
        return "잘못된 연산입니다."

# 함수 호출
print(calculator(10, 5, "add"))        # 15
print(calculator(10, 5, "subtract"))   # 5
print(calculator(10, 5, "multiply"))   # 50
print(calculator(10, 0, "divide"))     # 0으로 나눌 수 없습니다.

8.8 요약

  • 함수는 특정 작업을 수행하는 코드 블록으로, def 키워드를 사용하여 정의합니다.
  • 매개변수를 사용하여 함수 외부에서 값을 전달받을 수 있으며, return 문을 사용하여 값을 반환할 수 있습니다.
  • 기본값이 있는 매개변수와 가변 매개변수를 사용하여 더 유연한 함수를 정의할 수 있습니다.
  • 람다 함수는 간단한 기능을 가진 익명 함수로, 코드의 간결성을 높이는 데 유용합니다.

다음 챕터에서는 클래스에 대해서 알아보겠습니다.