언어/파이썬 & 장고
-
[Django] 장고에서 concurrent.futures의 process 사용하기언어/파이썬 & 장고 2020. 3. 7. 17:39
장고의 ORM을 사용하지 않고 DB 패키지인 (여기서는 PG를 선택) psycopg2를 사용하여 구현한다면 아래와 같은 코드로 예시를 들 수 있습니다.from concurrent.futures import ProcessPoolExecutor import psycopg2 import psycopg2.extras from psycopg2.extensions import new_type, DECIMAL class MultiProcessTest: def __init__(self): db = {} # DB 정보 self.dsn = f"host='{db['HOST']}' port='{db['PORT']}' dbname='{db['NAME']}' user='{db['USER']}' password='{db['PASS..
-
[Python] 추상화 클래스 ABC와 NotImplementedError 차이점언어/파이썬 & 장고 2020. 2. 29. 21:12
추상화 클래스 모듈인 ABC와 상속 받을 클래스의 함수 내에서 구현을 강제하는 NotImplementedError은 기능상 동일합니다. 상속을 받고 해당 함수를 정의하지 않으면 에러를 발생 시킵니다. 여기서 미묘한 차이가 나오는데 어떤 차이가 있는지 설명합니다.추상화 클래스 ABC 예시ABC 모듈은 파이썬 내장 모듈로 기능을 제공하고 있습니다.from abc import ABCMeta, abstractmethod, ABC class DBManager(metaclass=ABCMeta): @abstractmethod def connect(self): pass # 또는 class DBManager(ABC): @abstractmethod def connect(self): pass class MySQL(DBMan..
-
[Python] 리스트, 딕셔너리 sort(), sorted() 사용하기언어/파이썬 & 장고 2020. 2. 22. 17:21
보통 리스트 타입을 정렬할 때, .sort()로 간단하게 사용할 수 있습니다. 하지만 이 때, 2차원 배열 같은 특정 경우에서 비교하거나 딕셔너리의 값을 기준으로 정렬을 하고 싶다면 sort() 또는 sorted()에서 제공하는 key 옵션을 사용하여 정렬을 진행할 수 있습니다. 먼저 sorted()는 내장함수로 (이터러블 타입, key, reverse)와 같이 3개의 파라미터를 받으며 결과를 반환합니다. sort(key, reverse)는 리스트에서 제공해주는 메소드이며 딕셔너리에서는 볼 수 없습니다. 2차원 배열 정렬먼저 아래와 같이 2차원 배열이 있다고 가정하고 내부 배열의 각 첫 번째 값으로 정렬을 하는 예제입니다.target = [[1, 2], [3, 1], [2, 6], [4, 5], [3, ..
-
[Python] 문자열 앞에 0 채우기언어/파이썬 & 장고 2020. 2. 22. 17:03
보통 문자열 앞에 0을 채우는 행동은 날짜를 문자열로 계산할 때 유용하게 사용됩니다. 예를 들어, 2월을 yyyy/mm/dd로 표시한다고 하면 2020/02/02 와 같이 표현할 수 있습니다. 이 때, 요구 사항때문에 월 또는 일을 정수로 변환하여 계산한 뒤, 다시 문자열로 변경하면 '02' → (정수 변환) 2 → (문자열 변환) '2'가 되어 0을 추가 해줘야 합니다. 이러한 행동을 좀 더 편하게 할 수 있도록 아래에서 설명합니다.문자열 타입에서 원하는 개수만큼 0 채우기문자열 타입일 경우, 아래와 같이 2가지 방법이 있습니다. 먼저 zfill(개수)를 사용하여 [현재 스트링의 길이 - 개수]만큼 0을 채울 수 있습니다.text = '2' a = text.zfill(2) b = text.zfill(1..
-
[Python] List, Dictionary insert 성능 비교언어/파이썬 & 장고 2020. 2. 22. 16:49
알고리즘 문제를 풀다가 임시 컨테이너 타입에 값을 넣고 정렬을 한 다음, 다시 추출을 해야되는 요구사항이 있었습니다. 이 때, 선택할 수 있는 컨테이너 타입이 리스트와 딕셔너리가 있었는데 이 둘 중, 어느 것을 사용하는게 더 빠른지 궁금증이 생겨 성능 비교를 한 결과를 공유합니다.insert 성능 비교다음 테스트 시나리오는 10000번 반복문을 실행하면서 리스트와 딕셔너리 각각에 값을 대입하는 것입니다. 리스트는 append()를 진행하고 딕셔너리는 key와 value를 동일한 값으로 대입합니다.테스트를 진행할 때, 진행하는 현재 컴퓨터 상태에 따라 속도가 차이날 수 있으므로 테스트를 10000번씩 10번 반복하여 진행했습니다.import timeit def list_append(): target = [..
-
[Python] Numpy란?언어/파이썬 & 장고 2020. 2. 18. 21:36
Numpy란? Numpy는 다차원 배열을 쉽게 처리하고 효율적으로 사용할 수 있도록지원하는 파이썬의 패키지입니다. NumPy는 데이터 구조 외에도 수치 계산을 위해 효율적으로 구현된 기능을 제공합니다. 데이터 분석을 할때, Pandas와 함께 자주 사용하는 도구로 등장합니다. 왜 Numpy를 사용할까 데이터란 이미지, 오디오, 텍스트, 숫자 등 다양한 형태와 크기로 존재합니다. 사람은 이런 데이터들을 가지고 이해하지만 컴퓨터는 0 또는 1만 이해합니다. 여기서 핵심은 데이터를 숫자의 배열로 볼 수 있습니다. 실제로 데이터 분석을 수행하기 위한 전제 조건은 컴퓨터가 이해할 수 있도록 데이터를 숫자 형식으로 변환하는 것입니다. 여기서 효율적으로 배열을 저장 및 조작할 수 있어야 하는데 이러한 요구사항으로 N..
-
[Python] 여러 진수로 변환하기 (3진수, 4진수, 11진수 등등)언어/파이썬 & 장고 2019. 12. 8. 17:58
파이썬에서는 2진수, 8진수, 10진수, 16진수로 쉽게 변환할 수 있도록 내장함수가 포함되어 있습니다. 하지만 3진수나 4진수와 같이 다른 진수로 변환하고자 하면 직접 구현을 해야 합니다. (조사를 했지만 파이썬에서는 따로 제공하지 않는 것으로 확인)이러한 요구사항 때문에 아래에 2진수부터 16진수까지 변환하는 코드를 작성했습니다.NOTATION = '0123456789ABCDEF' def numeral_system(number, base): q, r = divmod(number, base) n = NOTATION[r] return numeral_system(q, base) + n if q else n # 2진수 result = numeral_system(18, 2) # 4진수 result1 = num..
-
[Python] 2진수, 8진수, 10진수, 16진수 변환언어/파이썬 & 장고 2019. 12. 8. 17:14
먼저 파이썬은 기본 10진수이기 때문에 다른 진수는 아래와 같이 접두어가 붙습니다.2진수: 0b8진수: 0o16진수: 0x10진수에서 2진수, 8진수, 16진수 변환bin(), oct(), hex() 내장함수 사용파이썬에서 제공하는 내장함수를 사용하면 쉽게 변환 할 수 있습니다.value = 60 b = bin(value) o = oct(value) h = hex(value) print(b) print(o) print(h) # 0b111100 # 0o74 # 0x3c 결과는 전부 문자열 타입입니다.format() 내장함수 사용forrmat() 내장함수를 사용하여 위 결과와 마찬가지로 변환할 수 있습니다.value = 60 b = format(value, '#b') o = format(value, '#o'..
-
[Django] serializer bulk create, update 구현하기언어/파이썬 & 장고 2019. 12. 3. 21:04
장고의 DRF를 사용하여 viewset을 구현하면 제목과 같은 기능이 필요할 때가 있습니다. 기본 ORM을 사용한다면 쉽지만 유효성 검사를 직접 구현해줘야 합니다. DRF의 serializer를 사용하여 처리를 하는 방식을 아래에서 설명합니다.bulk createbulk create는 큰 구현이 필요하지 않습니다. viewset에서 def list() 함수를 상속 받은 다음, 요청 데이터 타입이 list일 때만 serializer의 파라미터에 {'many': True}를 주면 끝납니다. class AdminViewSet(viewsets.ModelViewSet): def create(self, request, *args, **kwargs): kwargs["many"] = isinstance(request...
-
[Django] custom command 만들기언어/파이썬 & 장고 2019. 12. 2. 19:40
$ python3 manage.py --help를 입력하면 django에서 제공하는 command를 확인할 수 있습니다. 이 때, 사용자가 임의로 어떤 명령어를 만들고 해당 명령어를 통해 일련의 작업을 수행하도록 하기 위해선 커스텀 커맨드를 만들어야 합니다.개요먼저 프로젝트의 구성이 아래와 같다고 가정합니다.polls/ __init__.py models.py management/ commands/ _private.py closepoll.py tests.py views.py 커스텀 커맨드를 만들기 위해선 polls와 같이 app이 지정되어야 하고 해당 app 하위에 management/commands/ 폴더가 생성되어야 합니다. 해당 폴더의 이름은 고정이며 다른 이름으로 변경할 시, 커스텀 커맨드가 작동하..