업동씨 결혼식갔다가 와서 시간이 좀 남아서 PEP309에 제출된 다른 언어의 “curry” 함수를 훔쳐온 아이디어, partial을 한번 구현해 봤습니다. 요즘 회사에서 HTML그리기 등등 잡무만 했더니 집에서 생산력이 아주 높아져서.. 언젠가 Ken Thompson씨던가가 말씀하셨듯, 역시 회사에서 잡무가 늘어날 때가 오히려 창의적 성취는 늘어나는 묘한 관계가 있는건지도요 -.-a
partial은 nohmad님의 말씀에 따르면 C#에도 partial이란게 있는데, 여기의 partial과는 좀 다른 버추어 메쏘드 만으로 이뤄지는 클래스 비스무리한 것을 뜻하는 키워드라는군요.. PEP309의 partial은 함수 호출의 일부만을 미리 정의해서 callable object로 만들어주는, anonfunc나 operator.itemgetter랑 약간 비슷한 류의 도구입니다. 예를 들면
1 2 3 4 |
>>> import functional >>> revsorted = functional.partial(sorted, reverse=True) >>> revsorted([1,3,2,4]) [4, 3, 2, 1] |
요런 식으로, partial의 첫번째 인자는 함수이고, 두번째부터는 인자랑, 키워드 인자들이 들어갑니다. 그러면, 그 인자들이 함수에 나중에 적용되게 되는데, sorted의 원래 reverse 키워드의 기본 값이 False인데, 요렇게 True로 바꾼 것을 쉽게 만들 수 있겠죠~
partial은 타입 인자가 fn, args, kw 세개가 있는데, 셋을 만들고 나서 바꿀 수도 있습니다. 예를 들면,
1 2 3 4 5 6 7 8 9 10 |
>>> import operator, functional >>> calc = functional.partial(operator.add, 10) >>> calc(5) 15 >>> calc.args = (20,) >>> calc(5) 25 >>> calc.fn = operator.mul >>> calc(5) 100 |
믓흥믓흥. 뒷 인자를 못 바꾸는 약간 불편한 것은 있지만, 그래도 anonfunc에 비하면 논리적, 설게적으로 아주 깔끔하고 좋은 느낌입니다. +_+
패치는 요기에 제출했습니다.
그건 왜죠? 왜일까요?
난 아직도 못먹어봐쏘 ㅠㅠ
하하하하하하
퍼키옹이 규명해주세요.
대전과 부산에는 크리스피가 1개씩 있대요 -O-
부산에 2개라는데;;(소식만)
대전에도 생겼나요…. [대전살면서 모른다…<]
저는 서울 집 근처에서 사들고 대전 기숙사로 가는데 ;ㅅ;
ㅎㅎㅎ 대구엔 아직 없죠… 내 고향 대구… ^^ (고담대구라니… -ㄴ-;)
내 고향도 대구 히히
최근에 먹어봤는데 다시 먹고 싶다는 생각이 들지는 안던데요 ;;
대전에는 시청역 바로 옆에 있어요~ 손님이 없어서 썰렁.. ㅋㅋ
서울역에도 크리스피 크림이 있었나요?
내 고향도 대구 히히~
우리집 앞에 있는데 (노원역) -_-;