Passion/Python 81

Python 패키지 만들기

파이슨을 여러모로 유용하게 사용하면서 개인적으로 좀더 발전시켜서 사용하고 있다. 이렇게 쓰다 보면 간단하게 나도 패키지를 만들어서 나눠주면 좋을거 같은데 정확하게 어떻게 패키지를 만들어야 할지 감이 오지 않는다. 좀더 솔직하게 말하면 귀찮아서 문서를 보지 않고 있다가 맞을거 같지만 ^^; 그래서 큰 맘먹고 원문을 읽지는 않고 자료는 찾고 잘 만든 샘플을 바탕으로 정리를 할려고 한다. 일단 패키지를 풀면 있는 파일 setup.py 이 놈을 열어보면 너무나 간단하여서 실망을 할거 같다. 안에 어떤 것을 넣어야 하는지는 이게 가이드라인인가 보다

Passion/Python 2007.06.27

PLY - 개요

내용의 정리는 Document 를 기반으로 하는데 내 기준으로 정리합니다. 1. Introduction PLY는 기존의 C에서 사용하는 Lex와 Yacc을 Pure Python으로 구현한 것으로 보면 된다. LALR(1) 파싱을 한다. 설명의 기준의 기본적인 컴파일러에 대한 이해를 하고 있다고 가정한다. 2. PLY Overview PLY는 크게 두개의 모듈 lex.py 와 yacc.py로 구성되어 있다. 둘다 ply라는 Python 패키지에 포함되어 있다. 간단하게 설명하면 lex.py는 입력 파일을 받아서 토큰으로 잘라서 잘 저장하는 기능을 한다.(일반적인 lex를 유치원 수준으로 설명하면) yacc.py는 구분된 토큰을 바탕으로 문법(context free grammar)에 맞는지를 확인한다. 이를..

Passion/Python 2007.06.26

MAP 함수

map 함수는 리스트를 처리할 때 유용하게 사용된다. 예를 들어 1~10 의 값을 가진 리스트가 있는데, 이 값들의 제곱근을 구하고 싶은면 def myfunc(x): return x*x map(myfunc, range(10)) ...... myfunc 함수를 10번 수행했다고 보면 됨 따라서 함수의 파라메터가 두개일 때는 map(add, range(10), range(10)) 과 같이 뒤에 리스트를 파라메터 갯수만큼 추가하면 된다. 결과 : [ 1, 4, 9, .... , 81 ] - 리턴값은 리스트 이다. 만약 myfunc 함수가 더이상 사용되지 않으면 lambda 함수를 사용하여 해결할 수도 있다. map(lambda x:x*x , range(10)) map(lambda x,y:x*y, range(1..

Passion/Python 2007.04.06

파이슨 문법

퍼키님의 홈피에서 파이슨 코드를 봤는데 요즘 내가 짤려는 코드랑 유사한 기능을 해서 공부중인데 이상한 문법(?)의 파이슨을 사용해서 결국 파이슨 grammar 를 봅니다. name ::= lc_letter (lc_letter | "_")* lc_letter ::= "a"..."z" identifier ::= (letter|"_") (letter | digit | "_")* letter ::= lowercase | uppercase lowercase ::= "a"..."z" uppercase ::= "A"..."Z" digit ::= "0"..."9" stringliteral ::= [stringprefix](shortstring | longstring) stringprefix ::= "r" | "u" |..

Passion/Python 2007.03.30

OptParser 옵션 파싱

이건 Python 2.3(아마도) 부터 구현된 모듈이다. 쭈노는 커멘드 라인에서 받은 argument 처리는 좀 정리되었으면 좋겠다. 순서에 상관없이 분류할 수 있으면 좋겠고, 모듈기반으로 설계되어 같이 붙이기 좋으면 좋겠다. 이를 위해서 파이슨에서는 OptionParser 모듈을 제공한다. 이를 이용하면 좀더 깔끔한 코딩을 할 수 있다. from optparse import OptionParser [...] def main(): usage = "usage: %prog [options] arg" parser = OptionParser(usage) parser.add_option("-f", "--file", dest="filename", help="read data from FILENAME") parser..

Passion/Python 2006.10.16