Dandy Now!
  • [Python] 일급 함수: 런타임 초기화부터 partial 활용까지
    2025년 05월 08일 14시 26분 35초에 업로드 된 글입니다.
    작성자: DandyNow
    728x90
    반응형

    파이썬 일급 함수: 런타임 초기화부터 partial 활용까지

    파이썬에서 함수는 단순한 코드 묶음 그 이상이다. 함수는 일급 객체(First-Class Object)로서, 다른 객체들과 동일하게 취급될 수 있는 특별한 존재이다. 이번 포스팅에서는 파이썬 함수의 주요 특징과 함께 map, filter, reduce, callable, partial의 활용법을 살펴보고, 이를 통해 파이썬의 강력함을 느껴보자.

    1. 파이썬 함수의 특별한 특징

    파이썬 함수가 일급 객체로서 가지는 네 가지 핵심 특징은 다음과 같다.

    1.1. 런타임 초기화

    파이썬 함수는 코드가 실행되는 런타임에 동적으로 초기화된다. 함수 정의 시점이 아닌, 실제 코드가 실행될 때 함수 객체가 메모리에 생성되는 것이다.

    def greet(name):
        return f"안녕하세요, {name}님!"
    
    # greet 함수는 이 코드가 실행될 때 초기화된다.
    print(greet("지수")) # 출력: 안녕하세요, 지수님!

    1.2. 변수에 할당 가능

    함수는 마치 숫자나 문자열처럼 변수에 할당될 수 있다. 이를 통해 함수를 다른 이름으로 호출하거나, 데이터 구조에 저장하여 관리할 수 있다.

    def multiply(a, b):
        return a * b
    
    operation = multiply
    result = operation(5, 2)
    print(result) # 출력: 10

    1.3. 함수 인수로 전달 가능 (고위 함수)

    파이썬에서는 함수를 다른 함수의 인수로 전달할 수 있다. 이러한 함수를 고위 함수(Higher-Order Function)라고 하며, 코드의 유연성과 추상화 수준을 높이는 데 기여한다.

    def apply_operation(func, x):
        return func(x)
    
    def square(n):
        return n ** 2
    
    result = apply_operation(square, 3)
    print(result) # 출력: 9

    1.4. 함수 결과로 반환 가능 (고위 함수)

    함수는 또 다른 함수를 자신의 결과로 반환할 수 있다. 이 역시 고위 함수의 중요한 특징이며, 함수의 동작 방식을 동적으로 생성하거나 변경하는 데 활용된다.

    def create_power_function(exponent):
        def power(base):
            return base ** exponent
        return power
    
    pow_2 = create_power_function(2)
    result = pow_2(4)
    print(result) # 출력: 16

    2. 강력한 내장 함수 활용

    파이썬은 일급 함수의 특징을 활용하는 다양한 내장 함수를 제공한다. 그중 map, filter, reduce, callable의 사용법을 간단한 예제와 함께 살펴보자.

    2.1. map(function, iterable, ...)

    map 함수는 주어진 iterable의 각 요소에 function을 적용한 결과를 이터레이터로 반환한다.

    numbers = [1, 2, 3]
    squared = map(lambda x: x**2, numbers)
    print(list(squared)) # 출력: [1, 4, 9]

    2.2. filter(function, iterable)

    filter 함수는 iterable의 각 요소를 function에 통과시켜 True를 반환하는 요소만 걸러낸다.

    numbers = [1, 2, 3, 4, 5, 6]
    even_numbers = filter(lambda x: x % 2 == 0, numbers)
    print(list(even_numbers)) # 출력: [2, 4, 6]

    2.3. reduce(function, iterable[, initializer])

    reduce 함수는 functools 모듈에 있으며, iterable의 요소들을 왼쪽에서부터 누적적으로 function에 적용하여 단일 값을 반환한다.

    from functools import reduce
    
    numbers = [1, 2, 3, 4]
    product = reduce(lambda x, y: x * y, numbers)
    print(product) # 출력: 24

    2.4. callable(object)

    callable 함수는 주어진 object가 호출 가능한지 (함수, 메서드 등) 여부를 True 또는 False로 반환한다.

    def my_function():
        pass
    
    print(callable(my_function)) # 출력: True
    print(callable(3))         # 출력: False

    3. functools.partial 활용

    functools.partial은 기존 함수의 일부 인수를 미리 채워서 새로운 호출 가능한 객체를 만드는 데 사용된다. 함수의 재사용성을 높이고, 인자 수를 줄여 코드를 간결하게 만들 수 있다.

    from functools import partial
    
    def power(base, exponent):
        return base ** exponent
    
    square = partial(power, exponent=2)
    print(square(5)) # 출력: 25 (power(5, 2)와 동일)
    
    cube = partial(power, base=3)
    print(cube(2)) # 출력: 9 (power(3, 2)와 동일)

    결론

    파이썬의 일급 함수 특징과 map, filter, reduce, callable, partial과 같은 강력한 도구들을 이해하고 활용하면 더욱 효율적이고 유연한 코드를 작성할 수 있다. 함수를 데이터처럼 다루고, 고위 함수를 적극적으로 활용하여 파이썬 프로그래밍의 깊이를 더해보자.

    728x90
    반응형
    댓글