Python/2.7 information
함수 리팩토링 관련 모듈들.
qkqhxla1
2016. 6. 23. 13:44
파이썬코리아에 어떤 분이 글을 올리셨다.
눈팅하다 나라면 어떻게 할까 생각해봤는데 아래 댓글에도 있었지만 *args, **kwargs등을 이용해서 어떻게든 만들겠다.. 라고 구상만 하고 있었는데 이게 진짜 되는지 여러가지 방법론이 올라왔다.
당연히 나중에 쓸 일이 있을지 모르지만 쓰게되면 엄청나게 유용하게 보이기에 정리함.
1. multimethods 모듈이 있다고 한다. https://pypi.python.org/pypi/multimethods/
(아무리 찾아봐도 어떻게 쓰는지 잘 모르겠다.;)
2. 파이썬 3.4버전 이상에서는 https://docs.python.org/3/library/functools.html 요걸 사용할수 있다고 한다. 아래 코드는 예제.
from functools import singledispatch @singledispatch def fun(arg, verbose=False): if verbose: print("Let me just say,", end=" ") print(arg) @fun.register(int) def _(arg, verbose=False): if verbose: print("Strength in numbers, eh?", end=" ") print(arg) @fun.register(list) def _(arg, verbose=False): if verbose: print("Enumerate this:") for i, elem in enumerate(arg): print(i, elem) fun(10) fun(['rara','roro'])
3. 2번의 내용을 2버전에서 쓸수 있게 모듈 형태로 만든게 https://pypi.python.org/pypi/singledispatch#downloads 요거다.
모듈 설치후 저 코드를 그대로 가져오되 import라인만 from singledispatch import singledispatch 로 바꿔주고, print함수 끝의 end=" "같은것만 지워주면된다. 잘 작동하는걸 확인했다.