functools.partial을 이용하여 기존 함수를 재활용한 새로운 함수 만들기
딱히 쓸 일 없을 것 같은데 예전에 공부한 내용에 적혀있었으니 정리는 해놔야지
functools.partial을 이용하면 기존 함수를 재활용하여 새로운 함수를 정의할 수 있다
여기 예시 설명이 잘되어있네
보통 코딩하다보면 인자에 따라 다른 기능을 가지는 함수를 만들때가 있는데
다음 함수는 인자로 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에 수가 더 더해짐
'프로그래밍 > Python' 카테고리의 다른 글
colab에서 데이터를 준비하는 필수 명령어 wget, gunzip, unzip, tar xf, (0) | 2024.04.22 |
---|---|
ABC349 D번 복기 - log를 구하는 가장 정확한 방법 - math.log를 기피해야하는 이유 (0) | 2024.04.14 |
머신러닝에서 hyperparameter search를 도와주는 optuna 라이브러리 소개 (0) | 2024.04.02 |
-1 의 50만 거듭제곱을 -1**(500000)으로 하면 안되는 이유 (0) | 2024.02.17 |
(매우 중요)대용량 데이터로 colab 딥러닝 학습할 때 첫번째 epoch이 매우 느리다면(colab 대용량 데이터, dataloader 병목현상) (0) | 2024.01.18 |