1달 전쯤에 있었던 python-dev에서 토론 중에 나왔던 바로 그 연산자를 받으면 전부 함수로 만들어버리는 걸 그냥 모듈로 한번 만들어 봤습니다.
사실은 operator모듈에 넣고 싶었지만, 선행 연산자에 변수가 있으면 발생하는 모호성이나 체이닝 콜 같은 게 너무 심각해서 표준에 넣었다가는 돌맞을 것 같아서 으흐~;;
devel/py-anonfunc 에서 Sources 클릭하면 타볼을 받을 수 있습니다.
간단하게 사용법은 설치하고 파이썬을 띄우면 빌트인에 X, Y, Z, anonfunc가 들어가 있는데, X는 첫번째 인자, Y는 두번째 인자, Z는 세번째 인자, anonfunc는 얘네들의 클래스입니다.
>>> f = X + Y * Z
>>> f(1, 2, 3)
7
>>> f = divmod(X ** 3 + X ** 2, 5)
>>> f(12)
(374, 2)
>>> f = X[:5] + Y[-5:]
>>> f(range(10), range(20))
[0, 1, 2, 3, 4, 15, 16, 17, 18, 19]
>>> f1 = X ** 3 + 3 * (X ** 2)
>>> f2 = X + Y % X
>>> (f1 * f2)(3, 4)
216
>>> import sys
>>> f = anonfunc('mod').platform
>>> f(mod=sys)
'freebsd5'
import X
x=X.X()
ff=X.functionify
def identity(x):
return x
y=x(30)+1
f=ff(y)
assert 30+1==f(identity)
x=X(‘x’)
y=X(‘y’)
z=X(‘z’)
f=ff(x+y+z)
assert -1+2+4==f(x=-1,y=2,z=4)
아아. 명시적으로 함수화를 해 주는 방법인가요..
그런데, 아무래도 이 방법이 lambda 치기가 귀찮아서 쓰는 방법이다보니 좀 더 복잡해지면 아무래도 원래 목적을 잃어버릴 것 같기도 하구요.. 크흐 🙂
lambda 치기가 귀찮아서 쓸 수도 있고, early evaluation용으로 만들어진 함수들을 lazy evaluation 용으로 쓸 수도 있겠죠.
그렇다고는 하지만 온전하게 LE가 지원되지 못하니 아주 제한된 사용만 가능하겠죠.
이것도 신맛 저것도 신맛이군요. 히익.
저.. 저게 머냐.
맛있어요. 드셔 보세요 -ㅇ-;
이거 한국에서 팔아요??
옥션, 지마켓, 정(크)푸드 등에서 팔아요~