목록Programming/Python (11)
몰입공간
#1. sort() sort() 메서드는 사본을 만들지 않고 리스트 내부를 변경해서 정렬합니다. fruits = 'pineapple apple peach pear banana'.split() print('original_fruits:', fruits) # ['pineapple', 'apple', 'peach', 'pear', 'banana'] print('fruits.sort():', fruits.sort()) # None 반환 print('sort()_fruits:', fruits) # ['apple', 'banana', 'peach', 'pear', 'pineapple'], 기존 리스트가 변경 #2. sorted() sorted() 메서드는 새로운 리스트를 생성하여 반환합니다. money = [500..
#1. defaultdict 기본적으로 파이썬의 딕셔너리 자료형은 검색하려고 하는 key가 존재하지 않으면 KeyError를 내보냅니다. 이러한 KeyError를 핸들링하여 많은 일들을 할 수 있으면서도 반면에 KeyError를 raise하지 않으면서 자동으로 key를 생성 및 값을 설정할 수 있는 방법이 defaultdict과 __missing__() 메서드를 설정하는 것입니다. defaultdict은 존재하지 않는 key로 검색할 때, 사용자가 정한 항목으로 생성하도록 설정하는 딕셔너리 자료형 입니다. 일반적인 dict 자료형으로 KeyError를 핸들링했을 때는 다음과 같습니다. my_dict = {'a':list()} # Not using defaultdict iterwords = 'abcd' f..
#1. 지능형 리스트 (List Comprehesion) 파이썬에서 리스트를 생성하는 방법은 여러가지가 있습니다. alphabet = ['A','B','C','D'] alphabet = list('ABCD') alphabet = 'A,B,C,D'.split(',') alphabet = [alphabet for alphabet in 'ABCD']# 지능형 리스트 (List Comprehesion) 이 밖에 filter, map 객체에 list로 감싼다던가 하는 방식으로 리스트를 만들 수 있습니다. 지능형 리스트는 변수 = [ 지역변수 for 지역변수 in iterator ] 식으로 만들며 새로운 리스트를 생성합니다. [ ] 안은 파이썬 함수처럼 고유한 지역 범위를 가집니다. (참고로 괄호()로 감싸면 제너..
#1. namedtuple 네임드튜플(namedtuple)은 튜플 자료형 요소를 이름(label)으로 색인할 수 있는 파이썬 자료형 중 하나입니다. 말 그대로 '이름 있는 튜플'이라고 보면 됩니다. 기존의 튜플(tuple) 자료형 요소의 탐색은 리스트와 마찬가지로 tuple[1], tuple[2] 등의 인덱스로 찾습니다. 그러나 namedtuple의 경우 마치 dict 자료형 처럼 tuple.field1, tuple.field2 등 정해진 label(field)명으로 탐색이 가능합니다. namedtuple은 python collections 모듈의 하위 메서드 입니다. #2. namedtuple 예시 import collections Fruit = collections.namedtuple('Fruit',..
#1. 프로세스와 스레드 파이썬의 비동기 함수 async/await을 이해하는 과정에서 문득 떠오른 의문을 튜터님께 여쭤본 적이 있습니다. "비동기 함수를 통한 병렬 수행으로 동시 처리와 성능 향상이 되는 것은 알겠는데... 그럼 모든 함수에 async/await을 쓰면 되는 건가요?" 답은 "꼭 그렇지는 않다" 였습니다. "백엔드 개발자라면 시스템 설계 검증 과정을 통해 주어진 요구사항에는 어떠한 방법 (멀티프로세스/멀티스레드/비동기함수)이 가장 효율적인지 찾는 것이 중요하다. " 무엇인가 꽤나 중요한 것을 관통하는 메시지같은데, 사실 무슨 의미인지 잘 몰라서 한번 알아봤습니다. [프로세스(Process)] 프로그램이 메모리 상에서 구동되는 일종의 작업 단위 운영체제로부터 프로세서, 주소 공간, 메모리..
#1. Generator 제너레이터(Generator)는 파이썬 iterator의 한 종류로, 말그대로 값을 '생성'하는 함수입니다. yield문을 통해 원하는 값이 있을때 마다 함수를 호출하고 값을 생성합니다. 즉, yield문이 있다면 그 함수는 제너레이터 함수입니다. List, Tuple, Dict 등등 기존의 iterable한 파이썬 내장 컬렉션은 안에 있는 모든 데이터를 알아야 호출이 가능하고 그 데이터를 한번에 메모리에 적재합니다. 다만 그 데이터의 내용/처리시간/계산 등이 너무 방대하여 메모리 부하면에서 효율적이지 못한 경우, 혹은 무한루프로 처리해야 하는 반복문같은 경우 제너레이터를 통해 필요할때마다 호출하여 사용하는게 좋습니다. #2. Generator 생성 다음과 같이 몇 종류의 동물을..
#1. Poetry Poetry는 기존의 패키지 관리자/의존성 관리자인 pip을 대체할만한 강력한 툴입니다. 기존의 pip이 가진 태생적인 한계, 즉 호환 부분이나 의존성관리, 가상환경등을 poetry 하나로 정리할 수 있습니다. Poetry가 어떤식으로 패키지와 dependency를 관리하는지는 공식문서를 참고하거나 여기에 정리가 잘 되어있으니 참고하면 좋습니다. 만약 파이참을 사용하는 경우 프로젝트를 생성하는 단계에서 애초에 프로젝트폴더로 쓸 디렉토리를 지정하고, 가상환경이나 파이썬 버전을 손쉽게 설정할 수 있습니다. (이 단계에서 poetry 역시 손쉽게 세팅이 가능합니다.) 그러나 VScode를 사용한다면, 제 경우는 anaconda로 가상환경을 설정하고 vscode에서 인터프리터를 직접 지정하여..
#1. Bool 자료형 대부분 아시는 것 처럼, Bool 자료형은 True/False 두가지의 값을 가지는 자료형입니다. 파이썬 대부분의 자료형들은 보통 요소의 여부에 따라 Bool 값을 가지고 있습니다. 예를 들어 비어있는 리스트, 튜플, 딕셔너리, "" 등은 False 값을 가지고, 요소가 하나라도 있다면 True를 반환합니다. 숫자형의 경우는 1(True) / 0(False) 로 나타내죠. 근데 파이썬에서는 True / False의 값을 1, 0 숫자로 치환하여 연산에 적용할 수 있습니다. 대단한 건 아니지만, 흔히 소개되는 내용은 아니라서 혹시라도 설계에 도움이 될 까 싶어 공유합니다. #2. 실습 숫자 n을 매개변수로 받는 함수 num을 정의합니다. def num(n): return 20 - (..
#1. GridFS 기존의 mongoDB BSON 데이터의 자료 크기는 16MB로 제한하기 때문에 사진이나 동영상과 같은 미디어파일을 그대로 업로드 하기에 무리가 있었다. 이런 문제를 해결할 강력한 도구가 바로 GridFS이다. Gridfs는 파일 형태의 자료를 서로 참조가 가능한 2개의 컬렉션으로 분리 저장한다. 파일의 용량을 255kb을 기준으로 여러개의 chunk형태로 DB에 저장하고 서버에서 파일을 조회할 때 chunk형태로 분리된 파일과 다른 컬렉션에 저장된 메타데이터 정보를 참조해 조합하여 내보낸다. (사용자가 수정하지 않으면 자동으로 fs라는 bucket 이름을 붙인다.) fs.files : 업로드한 파일의 metadata를 저장 fs.chunks: 파일을 binary 형태로 저장 (파일의 ..
동일 과제에 대한 다른 사람의 코드를 리뷰하고 공부하면서 여러가지를 실험해보던 중에 재미있는 현상을 발견했다. 이리저리해도 이해가 가지 않아서 도움을 요청했는데 다행히 좋은 자료를 주신 분이 있어 매우 감사함을 느낀다. #1. 문제 여기 문자열 자료 p1과 3개의 문자열 요소를 가진 리스트 m이 있을 때, 두 자료를 하나의 리스트로 만드는 방법으로 append 함수와 extend 함수를 생성하였다. p1 = 'p1' m = ['m1', 'm2', 'm3'] def info_append(p,m): m.append(p) def info_extend(p1,m): p1 = [p1] p1.extend(m) info_extend(p1, m) print('p1 extend?', p1) # p1 info_append(..