-
Python: Generic 함수 만들기 (functools.singledispatch)컴퓨터/파이썬 2021. 4. 7. 21:34728x90반응형
functools
1. 소개
fastcore를 소개했을 때 Julia 언어의 멀티 디스패치 기능을 소개했었는데
기본 모듈에서 싱글 디스패치 제너릭 함수를 지원하는지 몰랐다. (3.4+ 이상부터 지원)
파이썬에서는 타입을 신경 쓰진 않지만 3.7+이상부턴 타입 힌트를 써주는 게 convention이 된 것 같다.
코드를 깔끔히 하고 싶을 때 쓸만한 것 같다.
2. 예제 1) add 함수
from functools import singledispatch sums = 0 # 기본이 되는 함수, 지정하지 않은 타입을 위함 # ... 은 구현 안할 때 사용할 수 있음 @singledispatch def add(arg): ... @add.register def _(arg: int): # int 타입은 여기로 global sums sums += arg @add.register def _(arg: float): # float 타입은 여기로 global sums sums += arg if __name__ == "__main__": add(3) add(5) print(sums) # 8 add(3.44) print(sums) # 11.44
3. 예제 2) 클래스
from functools import singledispatch class Solution: def __init__(self): self.result = 0 self.calc = singledispatch(self.calc) self.calc.register(int, self._calc_int) self.calc.register(list, self._calc_list) def calc(self, arg): ... def _calc_int(self, arg: int): print("Adding int") self.result += arg def _calc_list(self, args: list): print("Got list") for num in args: self.result += num if __name__ == "__main__": solution = Solution() solution.calc(30) # _calc_int 함수 호출됨 solution.calc([1, 2, 3, 4, 5]) # _calc_list 함수 호출됨 print(solution.result) # 45
728x90'컴퓨터 > 파이썬' 카테고리의 다른 글
Pyston: Python 3.8.8 최적화 버전 (0) 2021.05.09 Python: Google TTS 오디오 재생하기 (0) 2021.02.17 Python: 자크 비네의 피보나치 수열 방정식 (0) 2021.02.05