functools.partial을 이용하여 기존 함수를 재활용한 새로운 함수 만들기

딱히 쓸 일 없을 것 같은데 예전에 공부한 내용에 적혀있었으니 정리는 해놔야지

 

functools.partial을 이용하면 기존 함수를 재활용하여 새로운 함수를 정의할 수 있다

 

https://wikidocs.net/109304

 

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

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

wikidocs.net

 

 

여기 예시 설명이 잘되어있네

 

보통 코딩하다보면 인자에 따라 다른 기능을 가지는 함수를 만들때가 있는데

 

다음 함수는 인자로 add와 mul에 따라 args로 준 인자들을 add하거나 mul하는 함수

 

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

 

 

예를 들어

 

print(add_mul('add', 1, 2, 3, 4, 5))
15

print(add_mul('mul', 1, 2, 3, 4, 5))
120

 

 

만약 add_mul() 함수를 이용해서 다음과 같이 동작하는 add(), mul()함수를 만들고 싶다면?

 

add(1, 2, 3, 4, 5)  # 15 반환
mul(1, 2, 3, 4, 5)  # 120 반환

 

 

functools.partial((함수), 인자)

 

add = functools.partial(add_mul, 'add')은 add_mul(choice = 'add', *args)와 동일하다.

 

그래서 인자로 *args만 add()에 주면 덧셈을 해준다.

 

마찬가지로 mul = functools.partial(add_mul, 'mul')은 add_mul(choice = 'mul', *args)와 동일하다.

 

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')

 

 

인자는 아마 차례대로 대응시키는듯?

 

partial(add_mul,10) 이렇게 하면 에러남

 

choice에 10이 들어가서

 

 

 

예를 들어 partial(add_mul, 'add',10,2)하면?

 

add_mul('add', 10, 2)가 들어감

 

근데 *args는 여러개의 인자를 받을 수 있다는 뜻임

 

그래서 이후로 수를 더 넣으면 이미 들어간 10+2에 수가 더 더해짐

 

TAGS.

Comments