목록[Python] (18)
쿼카러버의 기술 블로그
python에서 callable이란 호출가능한 클래스 인스턴스, 함수, 메서드 등 객체를 의미한다. 참고로 파이썬에서는 모든 것이 객체기 때문에, 함수도 하나의 객체다. 함수 안에 data variable, 또 다른 함수 등을 가질 수 있고, 다른 함수의 argument로 전달될 수도 있기 때문이다. 무튼 callable을 정리해보면 아래와 같다. (1) __call__ 메서드가 있는 클래스 인스턴스거나 (2) 호출 가능한 메서드나 함수 그리고 위와 같이 객체가 callable한지 아닌지 판단하도록 해주는 callble이라는 내장함수가 있다. 이 함수는 해당 객체가 호출가능한지 점검한다. 예를 들어보자 (1) 함수 = callable (2) __call__ 를 내장한 클래스 인스턴스 = callable ..
파이썬으로 직접 패키지 혹은 모듈을 개발하고 사용하다보면 자주 겪는 에러 중 하나가 Import Error다. 대표적인 예로 아래 두가지 에러가 있다. [Python] ImportError: attempted relative import with no known parent package [Python] ModuleNotFoundError: No module named 'module_name' 물론 pip로 패키지를 빌드하고 나서 사용할 때는 패키지만 잘 설치하면 잘 발생하지 않는다. 하지만 웹어플리케이션을 개발할 때 모든 패키지들을 pip로 설치해서 사용하지는 않고 프로젝트 디렉토리에 패키지들을 모아놓고 사용하는 경우도 있는데, 이 때 모듈 내에 import 경로를 잘못 설정하면 위에 말한 에러들을 자..
파이썬 입문자에게는 정말 헷갈리는 용어들이 있다. 모듈, 패키지, 라이브러리, 프레임워크가 대표적인 예고, 정확하게 이들을 어떻게 구분해야 하는지 헷갈릴 수 있다. 다 import해서 쓰는데 뭐가 라이브러리고 뭐가 프레임워크인지 헷갈리는 것이다. 따라서 본 글에서는 Modular Programming이 무엇인지 간단히 알아보고 모듈, 패키지, 라이브러리, 프레임워크의 차이를 간단하게 정리해보도록 하겠다. Modular programming Modular programming을 이해하기 앞서 모듈이 무엇인지 이해해보자. 모듈이란 프로그램을 구성하는 구성요소로, 쉽게 말해 프로그램의 기능의 일부분을 분리한 코드 덩어리를 모듈이라고 한다. 예를 들어 계산기와 관련된 함수들을 구현하고, 이를 한 곳에 모아놓았다..
파이썬 기본 라이브러리인 itertools에는 groupby라는 함수가 있다. 알고리즘 문제풀 때나 개발 할 때, groupby를 활용한 사고가 익숙해지기만 하면 정말 유용하게 쓰일 수 있어서 개인적으로 좋아하는 함수다. 본 글에서는 itertools패키지의 groupby가 무엇인지 설명하고, 이를 활용한 몇 가지 알고리즘 문제를 풀어보려고 한다. itertools란? 매개변수로 입력된 iterable안에 있는 키를 확인 후, 분류하여 동일한 키를 가진 element 들을 해당 키를 기준으로 그룹지어 리턴한다. itertools.groupby 예제 이런건 사실 예제로 봐야 이해가 된다. from itertools import groupby d = [('Europe','Manchester'), ('Amer..
Jupyter Notebook과 Git을 함께 사용하는 경우에는, 코드의 버저닝이 매우 까다롭다. 코드를 제외한 output부분 까지 계속 diff에서 체크가 되기 때문이다. 이는 Notebook파일이 JSON Format으로 데이터를 저장하기 때문이고, cell안에 들어가는 데이터가 코드인지, output인지에 대한 구분을 컴퓨터가 자동으로 해주지 않는다. 그렇다고 매번 작업이 끝날 때마다 output을 지우자니 너무 귀찮다. 프로그래머라면 이를 자동화하고 싶은 욕심이 생길 것이다. 이는 git filter와 nbstripout을 활용해서 해결할 수 있다. - git filter는 working directory에서 git으로 파일이 업데이트 될 때 해당파일을 처리해준다. (clean filter나 s..
Lambda 함수란 파이썬에서 lambda는 런타임에서 생성해서 사용할 수 있는 익명 함수다. 자바스크립트에서의 람다 함수와는 조금은 다르다. 특징 : 람다는 N개의 매개변수를 가질 수 있지만, 하나의 expression만 허용한다. (아래 예시를 보면 이해가 될 것이다.) lambda arguments: expression 한번만 사용되거나 코드에서 아주 잠깐 동안 실행되는 코드에 주로 활용한다. map, filter, reduce와 같은 built-in 함수에 주로 같이 사용된다. 람다 함수의 장점 : 람다함수를 사용하는 경우는 코드가 간결하고, 메모리가 절약된다. 코드에서 lambda함수 다음 줄로 넘어가면 Heap 영역에서 증발하게 된다.(단발성으로 사용할 때 유용) (모든 것이 객체로 관리되는 ..
Reduce reduce()함수는 여러개의 데이터를 대상으로 누적 집계를 내기 위해 사용되는 함수다. reduce함수를 한 줄로 설명하자면 iterable를 단일 값으로 줄이기(reduce)위해 iterable의 element들을 왼쪽에서 부터 오른쪽으로 매개변수로 넘어온 함수에 대해 누적적용하는 built-in함수다. 당연히 내가 써놓고도 무슨말인지 잘 모르겠다. 이해하고보면 잘 정리가 된 글이지만, 이런 류는 그냥 예시를 보고 이해하는게 가장 편하다. 특징 reduce(집계 함수, 순회 가능한 데이터[, 초기값]) 집계 함수는 두 개의 인자를 받는다. 첫 번째 인자는 누적자(accumulator), 두 번째 인자는 현재값이 넘어오게 된다. 누적자는 함수 실행의 시작부터 끝까지 계속해서 재사용되고, 현..
Filter filter()는 파이썬의 내장 함수로, 여러 개의 데이터에서 특정 조건으로 일부의 데이터를 추려낼 때 사용한다. 특징 기본적인 사용방법은 아래와 같다. filter(function, iterator) iterator에 들어온 값들을 하나하나 function에 넣어서결과가 참인지, 거짓인지에 따라 해당 요소를 포함할지 말지를 결정한다. 사용 예시 1) letter라는 리스트 내에서 vowel만을 걸러내고 싶을 때 letters = ['a', 'b', 'd', 'e', 'i', 'j', 'o'] # a function that returns True if letter is vowel def filter_vowels(letter): vowels = ['a', 'e', 'i', 'o', 'u'] ..