반응형

프로그래밍/python 38

정규표현식 탐욕적 수량자에 대한 이해

탐욕적 수량자, 또는 욕심쟁이(greedy) 수량자라고도 한다. 이와 반대되는 것은 게으른(lazy) 수량자이다. 수량자에 대해서는 이전에 잠깐 언급했었다. 말 그대로 몇 개를 선택할지 결정하는 것으로 *, +, ?, {n}, {n,}, {n,m}등이 있다. 이런 수량자는 기본적으로 탐욕적(greedy) 수량자이다. 그렇다면 탐욕적이란 의미가 수량자에 어떻게 적용되는지 알아보자. 여기서 탐욕적이라 함은 백트래킹(backtracking) 알고리즘을 사용한다. 설명하자면 우선 정규 표현식을 검사할 문자열에서 전체를 한 덩어리로 보고 정규표현식과 매치되는지를 검사한다. 만약 매치되지 않는다면 끝에서 한 문자를 뺀후 다시 검사한다. 이렇게 뒤에서 하나씩 빼가면서 맞을 때 까지 검사해 나간다. 탐욕적 수량자 *이..

파이썬 정규 표현식 match, search 함수, group

앞서 파이썬에서 정규표현식을 어떻게 사용하는지 간단하게 살펴보았다. findall 함수를 사용하였는데 이 함수 외에도 검색을 위한 match, search함수가 있다. 또, 검색된 패턴을 다른 문자열로 치환해주는 sub 함수도 있다. 우선 여기서는 match, search만 살펴볼 것이다. 우선 앞서 다루었던 findall 함수의 특색을 살펴보자. 이 함수는 겹치지 않는 매칭을 모두 찾는다는 특징이 있다 겹치지 않는다는 의미는 다음과 같은 것이다. 이렇게 findall 함수는 찾는 문자열 간에 겹치지 않도록 모든 문자열들을 찾는다. 그리고 찾는 문자열들을 리스트로 반환해 주는 특징이 있다. 이제 설명할 match함수와 search함수는 찾는 방식도 findall함수와 차이가 있지만 반환하는 값도 차이가 ..

파이썬 정규표현식 기초

정규표현식, 쉽게 말해서 문자집합의 패턴이 일치하는지 검사하기 위해서 사용하는 표현이다. 패턴이라 하면 구체적인 단어가 아니라 예를들어 "알파벳으로 시작하는 4문자로 이루어진 단어" 또는 "문자로 시작하되 숫자로 끝나는 문자집합" 같은 표현이다. 이런 패턴을 표현한 식이 정규식, 즉 정규 표현식이다. 정규표현식의 쓰임새는 문자를 다루는 프로그램에서는 매우 광범위 하기 때문에(전화번호 찾기, 성이 kim인 사람 찾기, 숫자가 포함된 단어 제외하기) 대부분의 언어에서 정규표현식을 위한 라이브러리가 존재한다. 파이썬 역시 re라는 모듈을 import 하면 쉽게 정규 표현식을 사용하여 패턴을 검사할 수 있다. 왜 사용해야하나?물론 프로그램 마다 검색할 패턴은 정해져 있기 때문에 특정 패턴에대한 검사를 하는 함수..

파이썬 여러 버전을 설치했을 때 팁

현 시점에서 파이썬으로 개발을 할 때 고려해야할 사항 중에 어떤 버전을 사용할 것인가 결정해야 한다. 2.x버전과 3.x버전을 엄연히 다르다. 일반적으로 버전의 젤 첫 번째 숫자는 호환성에 대한 것이므로 2와 3은 호환성이 없다고 봐야한다. 2.x버전의 경우 향 후 5년간만 지원하고 그 뒤에는 3.x버전만 지원되기 때문에 사실상 2.7버전을 사용해야할 이유는 없다. 그럼에도 2.x 버전이 필요한 이유는 지금까지 사용해왔기 때문에 지금까지 구축되온 구조를 한번에 3.x버전으로 바꾸는 것은 힘들기 때문이다. 파이썬을 사용하다 보면 느끼겠지만 아직까지는 쓸모있는 많은 도구들이 2.7에서 제대로 작동하고 3.x에서는 불완전 또는 작동하지 않는 경우를 많이 봐왔다. 그래서 가끔 2.7에서 개발을 해야할 필요도 생..

파이썬 람다(lambda) 함수

파이썬의 람다함수는 매우 직관적입니다. C++11에서도 람다함수가 등장했는데 파이썬의 문법과 비교하면 복잡하죠. 아마 파이썬 문법 익숙하게 되면 C++ 람다함수를 보고 황당해 할겁니다. 람다함수란? 람다함수란 람다식, 또는 람다 표현식, 익명함수 등으로 알려져 있습니다. 실제로 이름이 없이 정의되어 사용됩니다. 이 녀석은 함수와 동일한 녀석인데 실제로 사용을 하는 건 자기 취향이라고 생각합니다. 없어도 되는데 보통 어디에 사용되냐 물으면 언어들마다 특색이 있기에 한마디로 정의할 수는 없겠지만, 우선 대부분의 언어들이 람다함수(람다식)을 지원하는 추세로 바뀌었기 때문에 소스를 읽기 위해서라도 알아둘 필요가 있습니다. 실제 함수와 비교 lambda x,y:x+y 는 람다식입니다. 여기서 f는 람다식의 위치를..

파이썬(python) 함수 및 스코핑룰(scoping)

함수에 대한 내용이 제어문 다음에 왔어야 했는데, 뜬금없이 파일 입출력에 대한 글을 써버렸네요. 아무튼 이 강의는 애초에 최소 C언어에 대한 기초가 있는 분들을 위한 강의지만, 처음 프로그래밍을 접하는 분들에게도 도움되는 내용이 있을 거라 생각됩니다. 그냥 몰라도 한번 따라 하시면 됩니다. 프로그래밍은 처음에는 머리굴려 생각하는 것 보다 몸으로 체득하는 것이 중요합니다. 다시 본론으로 들어가서 파이썬의 함수나 C/C++에서의 함수나 거기서 거기입니다. C/C++과 약간 차이가 나는 부분만 정리하고 넘어가면 되는 정도, 파이썬이 첫 프로그래밍 언어라면 그냥 그대로 익히시면 됩니다. 그리고 스코핑 룰이라 주제를 첨가했는데, C++의 이름공간과 전역 변수 지역변수의 비슷한 개념이라고 생각하시면 됩니다. 함수와..

파이썬 파일 임의 접근

파일의 내용을 쓰거나 읽을 때 FP(File Position)을 이용한다. 말 그대로 위치를 기억하는 FP는 파일을 열면 맨 앞을 가리킨다. FP를 움직이면서 파일을 읽을 시작위치 또는 파일에 쓸 위치를 조작한 뒤에 읽기, 쓰기를 한다. C언어와 개념은 비슷하지만 파이썬이 사용방법은 좀 더 심플하다. C언어에서의 FP(File Position) C언어에서의 파일처리는 꽤 복잡하다. 따라서 여기서는 간략하게 설명만 하고 파이썬에서 얼마나 심플해졌는지 간단한 비교만 하겠다. C언어에서 FP를 이동시킬 때 기준이 되는 세가지 위치가 위에 그려져 있다. SEEK_SET : 파일의 선두 SEEK_CUR : 현재 FP의 위치 SEEK_END : 파일의 끝 함수 int fseek(FILE *stream, long o..

파이썬(python) 파일 읽기, 쓰기

파이썬에서 파일을 읽는 방법 또한 매우 간단하다. 기본적으로 파일 읽기나 쓰기를 할 경우 파일을 open해야 한다. 파일을 open함수로 열면 해당되는 파일의 파일 디스크립터를 반환한다. 쉽게 말해 해당파일을 다른 파일과 구별하기 위해서 붙이는 번호라고 생각하시면 된다. 또한 파일을 다 사용한 경우 close를 해야 한다. 파일 열기 모드 우리는 단순하게 더블클릭으로 문서파일을 열 수 있다. 하지만 프로그램 내부적으로는 여는 방법에는 몇 가지 방법이 있는데 이것이 열기 모드다. 다음은 C언어에서의 파일 열기 모드인데 파이썬의 경우도 이 모드를 사용한다. r, w, a, r+, w+, a+ 여섯 가지 모드와 옵션으로 t 또는 b가 붙을 수 있다. r : 읽기 모드, 파일 없으면 Error r+: 읽기 또는..

파이썬 진법변환

파이썬으로 진법간 변환은 매우 간단하게 해결할 수 있습니다. 그래도 기본적인 진법간의 변환 방법에 대한 이해가 필요합니다. 진법간 변환을 하는 방법에 대한 이해는 다음을 살펴보길 바랍니다. 2014/05/02 - [컴퓨터구조] - 2진수를 10진수로 변환하는 방법(진수 간 변환 방법들) 2014/02/24 - [컴퓨터구조] - 10진수를 2진수로 변환하는 방법 임의의 진수를 10진수로 변환 int('x', n) : n진수 x를 10진수로 변환 x에 해당하는 수를 문자로 전달하는 것에 주의하자. n진수 ->x를 -> int(10진수)로 변환 이렇게 뒤에서부터 읽어보면 기억하기 쉽다. 주의할 점은 32진수가 초과되면 안 된다. 그렇게 사용할 일도 없겠지만 말이다. 10진수를 임의의 진수로 변환 파이썬에서 제..

파이썬(python) 제어문(if, for, while)

파이썬 제어문은 다른 언어(C언어)와 비슷하지만 가지 특징이 있다. 대표적 특징은 들여쓰기를 한다는 것인데, 들여쓰기를 해서 얻는 이점은 간결함이다. 하지만 개인적으론 들여쓰기는 제어문이 복잡해지면 가독성이 낮아짐을 느낀다. 이건 C언어의 블럭구조에 익숙해져 온 프로그래밍 습관인 한 몫 하는 듯 하다. 또한 들여쓰기는 문장의 배치에 제약을 주는데, 이는 정형화된 구조를 만드는 장점이 있지만, 경우에 따라서 답답함을 느끼기도 한다. 아무튼 파이썬이란 언어 자체가 워낙 간결함을 추구하고, 아주 복잡한 제어문을 사용한다면 어짜피 포퍼먼스가 낮아지기 때문에, C로 부분적인 대체를 하면 되니 불만은 없다. if문 예) - 조건문 끝에 : (콜론)을 사용하자. - 들여쓰기를 하자. - C언어의 else if 문은 ..

반응형