-
Python: Generic 함수 만들기 (functools.singledispatch)컴퓨터/파이썬 2021. 4. 7. 21:34728x90반응형
functools
1. 소개
fastcore를 소개했을 때 Julia 언어의 멀티 디스패치 기능을 소개했었는데
Python fastcore: 파이썬 업그레이드 모듈
fastcore fast.ai fastcore Github 링크 github.com fast.ai에서 제작한 파이썬 언어 확장 모듈 1. 소개 fastcore은 Julia 언어의 multiple dispatch, Ruby 언어의 mixins, Haskell 언어의 currying, binding 등..
www.seokdev.site
기본 모듈에서 싱글 디스패치 제너릭 함수를 지원하는지 몰랐다. (3.4+ 이상부터 지원)
파이썬에서는 타입을 신경 쓰진 않지만 3.7+이상부턴 타입 힌트를 써주는 게 convention이 된 것 같다.
코드를 깔끔히 하고 싶을 때 쓸만한 것 같다.
2. 예제 1) add 함수
pythonfrom 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) 클래스
pythonfrom 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