콘텐츠로 건너뛰기
Home » Development » Python » 페이지 17

Python

파이썬에서 한글이 깨진다고요? – 파이썬의 한글 입출력과 인코딩에 대해

파이썬의 한글 인코딩에 대해

파이썬의 대화형 인터프리터를 사용하다보면 한글 인코딩의 함정에 빠지기 쉬운데 이를테면 소스를 그대로 해석기로 실행하는 경우에는 인코딩 에러가 안나던 것이, IDLE을 통해서 실행해보면 오류가 난다거나 그 반대의 경우가 있다. 이렇게 이해할 수 없는 상황을 어떻게 해야할까?

몇년 전이라면 그것은 MS의 잘못이거나 파이썬의 잘못이었다. 하지만 윈도에서 한글로 된 데이터를 다뤄야 하는데 파이썬 2를 쓰고 있다면 그것은 매우 높은 확률로 당신의 잘못이다.

더 보기 »파이썬에서 한글이 깨진다고요? – 파이썬의 한글 입출력과 인코딩에 대해

인자를 받는 모양의 데코레이터 작성법

flask로 간단한 서버를 만드는 예제를 보면 좀 특이한 형태의 데코레이터 패턴을 발견할 수 있다. 바로 @app.route('/path')와 같은 모양의 인자를 받아 함수를 실행한 모양의 데코레이터가 그것이다. 흔하게 쓰이는 데코레이터 패턴이라면 @app.route 와 같이 함수나 클래스의 이름만 써서 사용하는데, 이러한 함수를 실행하는 꼴로 사용할 수 있을까? 물론 그렇게 만들 수 있으니까 쓰고 있을 것이다. 그래서 이런 모양의 데코레이터를 어떻게 만들 수 있을지에 대해 생각해 보았다.
더 보기 »인자를 받는 모양의 데코레이터 작성법

재귀호출과 피보나치 수열 탐구

재귀호출은 함수가 그 내부에서 자신을 다시 호출하는 것이다. 이는 언뜻 이상하게 보일 수 있고, 경우에 따라서는 의도치 않은 동작을 하게 할 수 있어서 일반적으로는 지양되는 방법이기는 하나, 대신에 코드가 짧아질 수 있고 실행 로직 자체가 어느 정도 제한된 경우라면 충분히 사용할 수 있다. 특히 하스켈과 같은 함수형 언어에서는 반복문을 돌리는 로직이 없기 때문에 재귀호출을 하는 함수를 자주 사용하게 된다. 더 보기 »재귀호출과 피보나치 수열 탐구

오일러 프로젝트 3번 문제

문제: 600851475143의 소인수 중 가장 큰 값을 구하시오. 소수를 찾는 가장 간단하고 무식한 방법은 2에서 자기자신까지 1씩 더하면서 나눠보고 확인하는 방법이다. 따라서 소인수를 찾으려면 1)나눠 떨어지는지 검사, 2) 그 수가 소수인지 검사를 하면 된다. 그래서 저 숫자의 가장 큰 소인수를 그런 무식한 방법으로 계산하려한다면…. 아마 컴퓨터가 한 동안 말이 없어질 건데, 꽤 오랜 시간동안 말이 없을 거다. 아, 물론 저 수에서 거꾸로 내려가면서 계산을 해보면 어떻겠냐고? 조금은 빠를 거 같은데 해보시라… 조금 더 계산 횟수를 단축 시키기 위해서 사용한 방법은… 더 보기 »오일러 프로젝트 3번 문제

[Python] SQLite3 DB의 테이블 칼럼 이름 알아내기

테이블의 칼럼 이름을 기억하기 힘든 경우에는  CREATE TABLE 명령을 따로 복사해서 보관하거나,  아예 종이에 출력해 두기도 하는데 만약 내가 만든 테이블이 아닌 경우에는 SQLite3 쉘을 실행해서 .schema 명령으로 테이블 스키마를 확인해야 한다. (사실 이것도 상당히 바람직한 방법인데, 윈도 시스템에서 이 작업을 할 수 있는 방법에 대해서는 조만간 다시 글을 하나 쓸 생각이다.)더 보기 »[Python] SQLite3 DB의 테이블 칼럼 이름 알아내기

네이버 블로그 xml-rpc 클라이언트 만들기 – 3

조금 더 깔끔하게 정리한 MetaWebLog API의 전체 소스. struct 형태로 내려받는 반환값은 포스트와 관계된 내용과 카테고리와 관련된 것들인데, 카테고리는 사실 상 카테고리 제목만 가지고 있으면 되고, 포스트와 관련한 내용은 포스트 클래스로 바로 변환하여 사용할 수 있게 했다. 또한 최종적으로 불러왔거나 발행한 포스트는 내부적으로 그 ID를 기억하여 사용이 쉽도록 했다. 이전 글에서도 잠깐 소개했지만, Post 클래스에서 팩토리 메소드를 구현하기 위해 @staticmethod 데코레이터를 활용. (까먹을까봐 계속 써 둠) 사용법은 간단하다. 네이버를 기준으로 설명하면 위 파일을 임포트해서 Weblog의 객체를 생성한다. 생성시 파라미터에는 네이버아이디,… 더 보기 »네이버 블로그 xml-rpc 클라이언트 만들기 – 3

[Python] 파이썬의 클래스 메소드, @staticmethod

파이썬의 데코레이터(decorator)문법은 흔히 찾아보기 힘든 문법인데 (거의 프레임워크들에서나 볼 수 있음) 클래스를 만들다보면 요긴하게 쓰이는 부분이 있다. (혹은 책 같은데서 찾아보게 될지도…) class Post: def __init__(self): pass @staticmethod def postFromStructs(structs): if type(structs) == list: result = [] for elem in structs: a = Post() for key in a.keys: setattr(a, key, elem[key]) result.append(a) if len(result) > 1: return result else: return result[0] else: result = Post() for key in structs: setattr(result, key, structs[key]) return result 위 코드에서 @staticmethod라는 데코레이터를 사용했는데, staticmethod는… 더 보기 »[Python] 파이썬의 클래스 메소드, @staticmethod

사전의 값을 객체속성처럼 접근하는 방법 – Python

파이썬의 사전은 키-값쌍의 형태로 데이터를 구분하여 저장할 수 있고, 사전의 값이 될 수 있는 타입은 제약이 없기 때문에 중첩된 형태의 사전을 만드는 것도 가능하다. 만약 사전의 모든 키가 문자열이라면 사전을 JSON 데이터로 변환할 수 있다. JSON은 자바스크립트에서, 자바스크립트 객체로 바로 변환할 수 있다. 따라서 자바스크립트에서는 root.somekey.nestedkey와 같은 식으로 객체 속성으로 접근해서 특정 위치의 값을 액세스하는 것이 가능하다는 말이다. 이에 반해 파이썬에서 JSON은 사전으로 파싱되고, 같은 데이터에 접근하기 위해서는 root[‘somekey’][‘nestedkey’] 와 같은 식으로 접근해야 한다. 이것을 자바스크립트에서처럼 root.somekey.nestedkey와 같이 액세스하기 위해서… 더 보기 »사전의 값을 객체속성처럼 접근하는 방법 – Python

파이썬의 데코레이터와 고차함수

데코레이터(decorator)는 말 그대로 어떤 객체에 대해서 부가적인 기능을 덧붙이는 것을 말한다. 어떤 클래스에 대해서 기능을 추가하려 할 때에 보통 그 클래스를 서브 클래싱하는데, 파이썬에서 데코레이터는 클래스가 아닌 임의의 함수에 대해서 기능을 추가한다. 언뜻 보기에 별 의미 없을 것 같은 이러한 패턴은 특정한 맥락에서는 코드를 간결하게 만들면서 문법적으로 깔끔하게 정리되는 코드를 만들 수 있는 장점이 있다. 오늘은 파이썬의 데코레이터는 어떻게 만들어지며, 어떤 상황에서 쓰일 수 있는지 알아보도록 하자.
더 보기 »파이썬의 데코레이터와 고차함수