본문 바로가기
언어 정리/python_lib,일급함수

functools.partial() 정리

by 알 수 없는 사용자 2022. 8. 17.

https://wikidocs.net/109304

 

031 기존 함수로 새로운 함수를 만들려면? ― functools.partial

functools.partial()은 하나 이상의 인수가 이미 채워진 새 버전의 함수를 만들 때 사용하는 함수이다. ## 문제 다음은 입력한 인수의 합과 곱을 choic ...

wikidocs.net

 


한 함수에 parameter 를 고정하고 재정의해서 쓰는 lib

전부 고정할 수 도 있고, 하나만 고정 할 수도 있다.

 


예시_1 : 

def add_mul(choice, *args):
    if choice == "add":
        result = 0
        for i in args:
            result = result + i
    elif choice == "mul":
        result = 1
        for i in args:
            result = result * i
    return result
    
add_mul('add', 1, 2, 3, 4, 5)
add_mul('mul', 1, 2, 3, 4, 5)

 

예시_2 : 예시 1의 호출 방식을 "add(1, 2, 3, 4, 5)" 이런식으로 바꾸고 싶다면 일반적으로는 이런식으로 짠다.

def add_mul(choice, *args):
    if choice == "add":
        result = 0
        for i in args:
            result = result + i
    elif choice == "mul":
        result = 1
        for i in args:
            result = result * i
    return result

def add(*args):
    return add_mul('add', *args)

def mul(*args):
    return add_mul('mul', *args)    

print(add(1,2,3,4,5))  # 15 출력
print(mul(1,2,3,4,5))  # 120 출력

 

예시_3 :  자 여기서 partial lib를 쓰면 더 간결하게 쓸 수 있다.

from functools import partial

def add_mul(choice, *args):
    if choice == "add":
        result = 0
        for i in args:
            result = result + i
    elif choice == "mul":
        result = 1
        for i in args:
            result = result * i
    return result


add = partial(add_mul, 'add')
mul = partial(add_mul, 'mul')

print(add(1, 2, 3, 4, 5))  # 15 출력
print(mul(1, 2, 3, 4, 5))  # 120 출력


# -----------------------------------------------------------------------------------
# partial 함수는 간단히 함수화 해주는 기능
def a(choice, x, y):
    if choice == 'add':
        result = x + y
    elif choice == 'mul':
        result = x * y
    return result


add = partial(a, 'add')
mul = partial(a, 'mul', 1, 1)

print(add(1, 1))  # 2 출력
print(mul())  # 1 출력

partial은 이처럼 하나 이상의 인수를 미리 채운 새 버전의 함수를 만드는 데 유용하다.

 

 

 

 

 

 

 

댓글