1달 전쯤에 있었던 python-dev에서 토론 중에 나왔던 바로 그 연산자를 받으면 전부 함수로 만들어버리는 걸 그냥 모듈로 한번 만들어 봤습니다. 사실은 operator모듈에 넣고 싶었지만, 선행 연산자에 변수가 있으면 발생하는 모호성이나 체이닝 콜 같은 게 너무 심각해서 표준에 넣었다가는 돌맞을 것 같아서 으흐~;;
devel/py-anonfunc 에서 Sources 클릭하면 타볼을 받을 수 있습니다.
간단하게 사용법은 설치하고 파이썬을 띄우면 빌트인에 X, Y, Z, anonfunc가 들어가 있는데, X는 첫번째 인자, Y는 두번째 인자, Z는 세번째 인자, anonfunc는 얘네들의 클래스입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
>>> 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가 지원되지 못하니 아주 제한된 사용만 가능하겠죠.
이것도 신맛 저것도 신맛이군요. 히익.
저.. 저게 머냐.
맛있어요. 드셔 보세요 -ㅇ-;
이거 한국에서 팔아요??
옥션, 지마켓, 정(크)푸드 등에서 팔아요~