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

Python

Fast Fibonacci Transform

큰 N에 대해서 N번째 피보나치 수를 구하기 피보나치 수열의 일반항을 구하는 함수에 대해서 오일러 프로젝트 관련 글에서 한 번 언급한 적이 있는데, 점화식을 그대로 정직하게 코드로 옮겨놓은 경우, 극히 작은 일부 n에 대해서만 실용성이 있을 정도로 비효율적이다. 35 정도를 넘기면 느려지기 시작하는데 40정도만 되어도 처참한 성능을 보여준다. 성능을 개선하기 위해서 메모이제이션 같은 테크닉을 사용할 수 있다. 미리 계산한 결과를 저장해두고 있다가 재계산을 피해서 반복횟수를 줄이는 방법이다. 메모이제이션 기능을 수행하는 데코레이터를 작성하여 함수 구현의 변경 없이 메모이제이션을 적용할 수 있다. 똑같은… 더 보기 »Fast Fibonacci Transform

파이썬 내장함수 일람 – Python 3.6.2 기준

파이썬 내장함수와 관련하여 간단하게 분류별로 나누고 정리해 보았다. 보다 자세한 사용법에 대해서는 파이썬 표준라이브러리 문서나 대화형쉘에서 help()를 이용해서 도움말을 얻도록 하자. 이 내장함수들은 하나 이상의 타입의 인자를 받을 수도 있고, 별도의 옵션 인자를 받기도 한다. 예를 들어 max() 함수는 max(a, b, c)와 같이 쓸 수도 있지만, max(aList)와 같이 연속열 1개를 인자로 받기도 하며, key= 파라미터를 줄 수도 있다. 본 글에서는 이런 세부 내용에 대해서는 따로 언급하지 않는다.
그외에 객체/모듈 조사 명령을 사용하여 내장 함수 목록을 뽑아내는 방법이 있는데, 이 부분은 글의 말미에서 추가로 소개하겠다. 더 보기 »파이썬 내장함수 일람 – Python 3.6.2 기준

Bool in Python

if True: 는 if 1: 보다 느리다. 적어도 파이썬 2에서는. 파이썬 2에서 True, False는 키워드가 아니며, 런타임에서 “평가”된다. 하지만 파이썬 3에서는 키워드로 등재되면서 1, 0 과 성능상의 차이가 없다.

양음력 날짜 변환 데이터 얻기

예전 한국천문연구원에서 운영하던 천문우주지식 정보 사이트에서 양/음력 변환기를 제공하면서, 관련된 알고리듬이나 데이터를 따로 제공해주지 않아서 말이 많았었는데, 시간이 오래 지나고 세상이 바껴서 그런지 이제 양음력변환은 오픈 API를 통해서 구할 수 있다. 그 외에도 네이버 캘린더 등을 통해서 양음력 변환이 가능하니, 방법은 많이 있다고 봐도 좋겠다. (업데이트 2022년 2월) https://www.data.go.kr/data/15012679/openapi.do 참고로 우리 나라에서 사용하는 음력 달력은 한국천문연구원에서 계산하여 발표하는 결과를 사용하고 있으며, 만년력 개념으로 두고두고 적용할 수 있는 일반적인 알고리듬이 공개되어 있지는 않다. (비공개라기 보다는 매년 측량을 통해서 오차를 갱신하고 필요한… 더 보기 »양음력 날짜 변환 데이터 얻기

instapush로 메시지 푸시 전송 요청을 보내보자

instapush라는 서비스가 있어서 예전에 그냥 시험삼아 끄적거려 봤는데, 너무 대충이라 간단히 레시피 식으로 어떻게 푸시를 보내는지 알아보는 시간을 가져보자. instapush는 홈페이지에서 계정을 생성한 후 자신의 애플리케이션을 등록하고 필요한 필드들을 설정한 다음, 요구되는 조건에 맞게 REST API를 호출해주면, instapush 앱이 설치된 스마트폰으로 푸시 메시지를 보내주는 서비스이다. 실제로 엄청나게 간단하기 때문에 쉽게 푸시 전송을 보낼 수 있다. 회원 가입 및 앱 생성 먼저 instapush 홈페이지에 가서 회원가입을 한다.  그런다음 Dashboard의 Apps 탭으로 가면 애플리케이션을 만들라는 버튼이 있다. [+ Add Application] 버튼을 클릭해서… 더 보기 »instapush로 메시지 푸시 전송 요청을 보내보자

페이지 1 2

Subprocess 모듈 사용법 – 파이썬에서 서브 프로세스를 생성하기

Subprocess 모듈 이란?

subprocess 모듈은 파이썬 프로그램 내에서 새로운 프로세스를 스폰하고 여기에 입출력 파이프를 연결하며 리턴코드를 획득할 수 있도록 하는 모듈로, 다른 언어로 만들어진 프로그램을 통합, 제어할 수 있게 만드는 모듈이다. 이 모듈은 기존에 오랜된 몇몇 모듈과 함수(os.system, os.spawn*)들을 대체하기 위해 만들어졌다. (혹은 os.popen 같은 함수도…)

더 보기 »Subprocess 모듈 사용법 – 파이썬에서 서브 프로세스를 생성하기

파이썬의 이름공간과 변수의 스코프

네임스페이스(name space, 이름공간)이란 프로그래밍 언어에서 특정한 엔티티를 이름에 따라 구분할 수 있는 범위를 말하는 것이다. 소스코드를 작성할 때 가장 어려운 일 중 하나는 변수나 함수의 이름을 정하는 것인데, 충돌이 발생하지 않도록 변수/함수의 이름을 모두 유니크하게 만드는 것은 현실적으로 불가능하다. 모든 이름을 외우고 있기도 어렵거니와, 여러 사람이 협업하는 경우에 다른 사람이 쓸 이름까지 다 알 수는 없기 때문이다.

그래서 프로그래밍언어에서는 네임스페이스라는 개념을 도입하여, 특정한 하나의 이름이 통용될 수 있는 범위를 제한한다. 따라서 소속된 네임스페이스가 다르다면 같은 이름이 다른 개체를 가리키도록 하는 것이 가능해진다.

더 보기 »파이썬의 이름공간과 변수의 스코프

파이썬에서 제네릭 함수 정의하기 – singledispatch

어떤 하나의 함수 (혹은 겉으로 보기에 이름이 다른 여러 다른 함수)가 여러 타입의 인자를 받고, 인자의 타입에 따라 적절한 동작을 하는 함수를 제네릭 함수라고 한다. C++이나 Swift에 이런 제네릭 관련 기능이 언어 레벨에서 지원되는데, 사실 파이썬은 동적 타입 언어이기 때문에 언어수준의 명시적인 제네릭 지원 기능은 없다.1 파이썬의 제네릭 비록 파이썬이 동적 타입 언어이기는 하지만, 파이썬 내에는 제네릭과 비슷한 함수들이 있다. 기본 함수 중 len() 함수는 리스트, 집합, 사전, 문자열 등 타입에 대해 객체의 길이값을 구할 수 있다. 이 때 길이는 구하는 방법은… 더 보기 »파이썬에서 제네릭 함수 정의하기 – singledispatch

대기오염 정보 파싱하기

대기오염 정보를 가져다가 파싱해보자. 대기오염 실시간 예보 사이트인 airkorea에서 우리동네 예보 페이지를 뜯어보니 아래와 같은 주소로 데이터를 json으로 받아오고 있었다.

http://www.airkorea.or.kr/web/pollution/getRealChart
?dateDiv=1
&period=1
&stationCode=823652

여기서 stationCode는 관측소 코드가 된다. 집에서 그나마 가까운 검단 관측소의 코드는 823652였다. 더 보기 »대기오염 정보 파싱하기

괄호를 처리할 수 있는 사칙연산 계산기 (Python)

파이썬으로 간단한 사칙연산 계산기를 만들어보자. 실질적으로는 간단한 계산을 명령줄에서 수행할 수 있는 계산기가 필요해서 (계산기 앱을 실행하는게 귀찮…) 만들어보기로 했다.

실질적으로 간단한 덧셈, 나눗셈이 아니라, 다항식을 계산하고, 괄호가 들어있는 수식을 계산하는 기능이 필요했다. 따라서입력 자체는 명령줄 인자로 받으며, 가능한 한 ‘관대하게’ 처리하고자 했다.

이를 위해서는 입력받은 식을 공백이나 연산기호를 구분점으로 파싱하고, 후위식으로 변환한 후 이 후위식을 하나의 항으로 계산한 다음, 그 결과를 출력해주면 된다. 이들 각각의 과정을 함수로 만들고 최종적으로 하나의 코드로 조립해나간다.

더 보기 »괄호를 처리할 수 있는 사칙연산 계산기 (Python)