partial() 란?
positional parameter인 args와 keyword parameter인 keywords로 호출된 함수처럼 동작하는 새 partial 객체를 반환하는 역할을 합니다.
쉽게 말하자면 함수 인자의 값이 미리 채워진 상태로 동작하는 함수(partial 객체)가 반환되는 것입니다.
언제 사용하나요?
함수를 호출할 때의 인수가 이미 채워진 채로 동작하는 새로운 함수를 만들 때 유용합니다. 예시와 함께 설명하겠습니다.
# 1~4 까지의 곱셈을 위한 코드
def mul(*args):
result = 1
for i in args:
result = result * x
return result
add(1, 2, 3, 4)
# 그러나 100을 기준으로 곱하고 싶다면?
def mul_by_100(*args):
result = 100
for i in args:
result = result * x
return result
mul_by_100(100, 1, 2, 3, 4)
# 이번에는 200을 기준으로 더하고 싶다면?
# 반복적으로 이어지는 함수 작성..
위와 같은 상황에서 기준값이 변경이 될 때마다 함수를 계속 만드는 것은 굉장히 비효율적이며 보기에도 좋지 않습니다.
이럴때 partial가 위력을 발휘합니다.
# 1~4 까지의 곱셈을 위한 코드
def mul(*args):
result = 1
for i in args:
result = result * x
return result
add(1, 2, 3, 4)
# 그러나 100을 기준으로 곱하고 싶다면?
# partial 함수 이용
mul_by_100 = partial(mul, 100)
mul_by_100(2, 3) -> 600
# 200을 기준으로 곱하고 싶다면?
mul_by_200 = partial(mul, 200)
이처럼 partial를 이용하면 반복되는 코드 작성을 줄일 수 있습니다. 내부적으로는 100 이라는 인자값이 이미 전달된 상태의 함수가 mul_by_100 변수에 할당되어 있습니다.
라이브러리 내부에서는 많이 사용되는 모습을 보았지만, 비즈니스 로직이 담긴 서비스에서는 사용 되어지는 것을 많이 보지는 못한 것 같습니다. 저도 최근에 알게된 내용인지라 특정한 상황에서 partial 사용을 고려해볼 것 같고, 추후에 실제로 사용하면서 어떠한지에 대해서도 다뤄보도록 하겠습니다.
읽어주셔서 감사합니다 :)
728x90
'SW개발 > Python' 카테고리의 다른 글
[Python]파이썬 비동기 프로그래밍 동작 원리에 대해서 (feat. 이벤트 루프) (2) | 2023.12.26 |
---|---|
[Python]staticmethod vs classmethod (feat. 언제 사용할까?) (0) | 2022.10.23 |
[Python]파이썬 정렬 알고리즘, Timsort (0) | 2022.08.06 |
[Python]네임스페이스란(Namespace) ? (0) | 2022.08.06 |
[Python]Function Parameter, Argument 에 대하여 (0) | 2022.05.14 |