functools.partial
함수는 하나 이상의 인수가 이미 채워진 함수의 새 버전을 만들 때 사용하는 함수다.
add_mul
함수에 입력 인수의 합과 곱을 choice
의 값에 따라 선택적으로 리턴하는 함수다.
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
와 mul
함수를 작성하라
add(1, 2, 3, 4, 5) # 15 리턴
mul(1, 2, 3, 4, 5) # 120 리턴
대부분 사람은 아래와 같은 코드로 작성할 것이다.
def add(*args):
return add_mul('add', *args)
def mul(*args):
return add_mul('mul', *args)
하지만 functools.partial
를 사용하여 인수를 지정해 함수를 재정의 할 수 있다.
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 출력
만약 add
함수는 항상 100을 기준으로 시작되어야 한다고 가정한다면 다음처럼 간단하게 정의할 수 있다.
add = partial(add_mul, 'add', 100)
이와 같이 add
함수를 지정하고 add(1)
을 호출하면 이미 채워진 100 이라는 값에 1이 더해져서 101이 리턴될 것이다.
마찬가지로 mul
함수도 다음과 같이 기준값을 1000으로 지정할 수 있다.
mul = partial(add_mul, 'mul', 1000)
이와 같이 mul
함수를 지정하고 mul(2, 3)
을 호출하면 6000이 리턴될 것이다.
그리고 partial
로 만든 함수는 다음과 같이 func
와 args
속성을 갖는다.
<function add_mul at 0x7f3a483893a0>
('add', 100)
add
가 가리키는 함수(func)는 add_mul
이고 add_mul
함수에 이미 ('add', 100)
이라는 인수(args)가 채워져 있음을 보여준다.
참고 링크: https://wikidocs.net/109304