블로그 이미지
kalstein

여러가지 프로그래밍 관련이나...신변잡기적인 글들을 남기는 블로그입니다. 지식은 나누는만큼 강력해집니다 ^^

Rss feed Tistory
카테고리 없음 2011. 6. 13. 16:55

python 배포이미지 만들기.

setup.py 좀 만들어주고...
디렉토리에 맞게 파일들 다 넣었으면.

setup.py bdist_wininst

이거 하나면 오케바뤼 (windows환경에서만)
setup하는 exe파일을 만들어준다!! +_+
,
Programming/Python 2011. 6. 1. 10:28

Python 느님의 위엄. callback 함수 작성이 너무도 쉽다!

C/C++에서는 callback 함수 한번 작성하려면 상당히도 귀찮다.
대표적인 callback 함수 쓰는게 sort() 라고 볼수있다. (STL에서는 for_each도 있고)
(callback 함수라기보다는 임시함수라고 하자. 그게 더 맞는 표현이니...ㅋ)

간단히 표현하자면, 함수호출시 인자값으로 함수포인터를 넘겨주는건데...
이게 좀 code reading 상 불편한 점이 있다. 왜냐고?

func_A (int i)
{ .... }
func_B(callback_func func)
{
    func(10);
}
main_func()
{
    func_B(func_A);
}

보통 이런 구조가 되는거다.
그러면, main_func을 읽고있다가 func_B 를 호출하는걸 알았다.
근데 func_A는 또 뭐야? 뭘 어떻게 비교하는거지?

이런 불편함때문에 boost lambda라는것도 있다.
저런 함수들은 보통 사이즈가 작고 구문도 간단한 경우가 많다.
그래서 람다 함수로 작성하면 func_A 같은걸 따로 작성하지않을 수 있고
코드 리딩도 쉬워진다.

반면, 복잡한 함수라면? 조금 까다로워진다.
어려운 람다함수를 쓰느니 그냥 func_A를 쓰는게 더 나을수있다는것.
자 그러면 python에서는 어떨까. nested function 선언이 가능하다!

>>> def outer():
       x
= 1
       
def inner():
           
nonlocal x
           x
= 2
           
print("inner:", x)
       inner
()
       
print("outer:", x)


>>> outer()
inner
: 2
outer
: 2

특히나, "nonlocal" 키워드를 통해서, 일반 function과의 변수를 공유할수도 있다.
(공유하기 싫으면 "nonlocal x" 만 지워버리면 된다. 그럴경우 outer의 x와 inner의 x는 전혀 별개의 변수)
정말 python은...쓸수록 귀요미인듯 =_=;;;
,
Programming 2011. 6. 1. 10:12

클로져(closure)란게 뭐지?

난 C/C++ 를 더 오랫동안 잘 써왔다.
최근들어서 그래도 이리저리 뒤적거리는게 python.
C/C++에 비해 유지보수의 장점도 있고, 기본제공되는 라이브러리도 다양하고, 여튼 상당히 괜찮은 느낌이라서 사용중인데... closure라는게 있길래 좀 살펴봤다.

알아보니..음 뭐랄까. C++의 binding과 비슷했다. (boost 의 bind)
a,b를 인자로 가지는 func(a,b)이 있다손 치면, b라는 녀석을 고정시키고 func(a)를 만들어낸달까.

뭐 사실... 그닥 실용적인 예제는 모르겠다. -_-;;;;
굳이 꼽자면 Command 패턴에 사용하기 좋다는것. (bind를 활용해서도 잘 쓰니까...)
그정도...? 그래도 이런게 언어적으로 지원되는거랑 안되는거랑은 많이 차이난다.
쓸려고하는데 지원이 안되면 꼼수로 뱅뱅 돌아가야되거든...ㅎ

,
TOTAL TODAY