파이썬 함수: 개념 및 사용법

**함수(Function)**는 코드를 재사용 가능하도록 묶은 코드 블록입니다. 함수는 입력값을 받아 처리를 수행하고, 결과를 반환할 수 있습니다. 이를 통해 코드의 중복을 줄이고, 가독성을 높이며, 유지보수를 용이하게 합니다.


1. 함수의 기본 구조

파이썬에서 함수를 정의하려면 def 키워드를 사용합니다.

def 함수이름(매개변수):
    """(선택적) 함수의 설명"""
    실행할 코드
    return 반환값  # (선택적)

예제:

def greet(name):
    """사용자를 환영하는 메시지를 출력합니다."""
    return f"안녕하세요, {name}님!"

print(greet("철수"))  # 안녕하세요, 철수님!

2. 함수 호출

  • 함수를 정의한 후, 함수 이름과 함께 필요한 인자를 전달하여 호출합니다.
  • 예제:
    def add(a, b):
        return a + b
    
    result = add(3, 5)
    print(result)  # 8
    

3. 매개변수와 인자

(1) 위치 인자 (Positional Arguments)

  • 인자의 순서가 매개변수에 매칭됩니다.
  • 예제:
    def multiply(a, b):
        return a * b
    
    print(multiply(2, 3))  # 6
    

(2) 키워드 인자 (Keyword Arguments)

  • 인자의 이름을 명시하여 매개변수에 값을 전달.
  • 순서에 의존하지 않음.
  • 예제:
    def divide(a, b):
        return a / b
    
    print(divide(b=2, a=10))  # 5.0
    

(3) 기본값이 있는 매개변수 (Default Arguments)

  • 매개변수에 기본값을 설정하여, 값이 전달되지 않으면 기본값 사용.
  • 예제:
    def greet(name="사용자"):
        return f"안녕하세요, {name}님!"
    
    print(greet())  # 안녕하세요, 사용자님!
    print(greet("민수"))  # 안녕하세요, 민수님!
    

(4) 가변 인자 (Variable-Length Arguments)

  • 함수가 전달받는 인자의 개수를 모를 때 사용.

가변 위치 인자 (*args)

  • 여러 개의 위치 인자를 하나의 튜플로 전달.
  • 예제:
    def total_sum(*args):
        return sum(args)
    
    print(total_sum(1, 2, 3, 4))  # 10
    

가변 키워드 인자 (**kwargs)

  • 여러 개의 키워드 인자를 하나의 딕셔너리로 전달.
  • 예제:
    def display_info(**kwargs):
        for key, value in kwargs.items():
            print(f"{key}: {value}")
    
    display_info(name="Alice", age=25, city="Seoul")
    # name: Alice
    # age: 25
    # city: Seoul
    

4. 함수 반환값

(1) 단일 값 반환

  • return 키워드로 값 반환.
  • 예제:
    def square(x):
        return x * x
    
    print(square(5))  # 25
    

(2) 여러 값 반환

  • 튜플로 여러 값을 반환.
  • 예제:
    def calculate(a, b):
        return a + b, a - b
    
    result = calculate(5, 3)
    print(result)  # (8, 2)
    

5. 람다 함수 (Lambda Function)

  • 간단한 함수를 한 줄로 정의할 때 사용.
  • 구문 형식:

    lambda 매개변수: 표현식
    

  • 예제:

    square = lambda x: x * x
    print(square(4))  # 16
    

  • 함수의 인자로 사용 가능:

    numbers = [1, 2, 3, 4, 5]
    squares = list(map(lambda x: x * x, numbers))
    print(squares)  # [1, 4, 9, 16, 25]
    


6. 함수 스코프

(1) 지역 변수 (Local Variable)

  • 함수 내부에서 선언된 변수는 해당 함수 내에서만 사용 가능.
  • 예제:
    def my_function():
        x = 10
        print(x)  # 10
    
    my_function()
    # print(x)  # NameError: x is not defined
    

(2) 전역 변수 (Global Variable)

  • 함수 외부에서 선언된 변수는 모든 함수에서 접근 가능.
  • 예제:
    x = 10
    
    def my_function():
        print(x)  # 10
    
    my_function()
    

(3) global 키워드

  • 함수 내부에서 전역 변수를 수정하려면 global 키워드 사용.
  • 예제:
    x = 10
    
    def update_global():
        global x
        x = 20
    
    update_global()
    print(x)  # 20
    

(4) nonlocal 키워드

  • 중첩 함수에서 상위 함수의 변수를 수정하려면 nonlocal 키워드 사용.
  • 예제:
    def outer_function():
        x = 10
    
        def inner_function():
            nonlocal x
            x = 20
    
        inner_function()
        print(x)  # 20
    
    outer_function()
    

7. 재귀 함수 (Recursive Function)

  • 함수가 자기 자신을 호출하는 함수.
  • 종료 조건을 반드시 포함해야 함.
  • 예제: 팩토리얼 계산
    def factorial(n):
        if n == 1:
            return 1
        return n * factorial(n - 1)
    
    print(factorial(5))  # 120
    

8. 함수 데코레이터

  • 함수의 동작을 확장하거나 수정할 때 사용.
  • 구문 형식:

    @데코레이터_이름
    def 함수이름():
        실행할 코드
    

  • 예제:

    def decorator(func):
        def wrapper():
            print("함수 실행 전")
            func()
            print("함수 실행 후")
        return wrapper
    
    @decorator
    def say_hello():
        print("Hello!")
    
    say_hello()
    # 함수 실행 전
    # Hello!
    # 함수 실행 후
    


요약

  1. 함수 정의 및 호출: def 키워드를 사용하여 정의, 함수 이름으로 호출.
  2. 매개변수와 반환값: 위치 인자, 키워드 인자, 기본값, 가변 인자를 활용.
  3. 스코프: 지역 변수와 전역 변수를 구분하며, 필요시 globalnonlocal 사용.
  4. 람다 함수: 간단한 함수를 간결하게 표현.
  5. 재귀 함수: 함수 내에서 자기 자신 호출.
  6. 데코레이터: 함수의 동작을 쉽게 확장.

파이썬 함수는 유연하고 강력한 기능을 제공하여 다양한 작업을 간결하고 효율적으로 처리할 수 있습니다. 😊