[Python]partial 란? (feat. functools)

2022. 10. 19. 21:35·SW개발/Python

partial() 란?

positional parameter인 args와 keyword parameter인 keywords로 호출된 함수처럼 동작하는 새 partial 객체를 반환하는 역할을 합니다.

쉽게 말하자면 함수 인자의 값이 미리 채워진 상태로 동작하는 함수(partial 객체)가 반환되는 것입니다.

 

partial 파이썬 공식 Document

 

functools — 고차 함수와 콜러블 객체에 대한 연산 — Python 3.10.8 문서

functools — 고차 함수와 콜러블 객체에 대한 연산 소스 코드: Lib/functools.py functools 모듈은 고차 함수를 위한 것입니다: 다른 함수에 작용하거나 다른 함수를 반환하는 함수. 일반적으로, 모든 콜러

docs.python.org

 

언제 사용하나요?

함수를 호출할 때의 인수가 이미 채워진 채로 동작하는 새로운 함수를 만들 때 유용합니다. 예시와 함께 설명하겠습니다.

# 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. 이벤트 루프)  (4) 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
'SW개발/Python' 카테고리의 다른 글
  • [Python]파이썬 비동기 프로그래밍 동작 원리에 대해서 (feat. 이벤트 루프)
  • [Python]staticmethod vs classmethod (feat. 언제 사용할까?)
  • [Python]파이썬 정렬 알고리즘, Timsort
  • [Python]네임스페이스란(Namespace) ?
Leffe_pt
Leffe_pt
개발자로서 성장하면서 배워온 지식과 경험을 공유하는 공간입니다.
  • Leffe_pt
    Leffe's tistory
    Leffe_pt
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • SW개발 (303)
        • 코딩테스트 (172)
        • 개발이야기 (23)
        • IT 용어 (17)
        • Python (22)
        • Django (46)
        • Flask (2)
        • Database (1)
        • SQLAlchemy (0)
        • Javascript (5)
        • Linux, Unix (3)
        • JAVA (2)
        • Spring (10)
      • 회고 (4)
      • 사진 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    음식
    오픈소스
    django
    라이프 스타일
    트리 #AVL #알고리즘 #자료구조
    배공파용
    Contributor
    컨트리뷰터
    배달
    플레이스토어
    배달비 공유
    g
    어플리케이션
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Leffe_pt
[Python]partial 란? (feat. functools)
상단으로

티스토리툴바