Python : match
2023. 4. 6. 01:11
Python/Python
지금껏 python에는 switch 문이 없는 줄 알았다. 근데 최근 python 3.10에서 새로 생겼다는 걸 오늘에서야 처음 알게되었다. 바로 Match. match를 이용하여 직관적으로 그리고 더 편하게 값을 비교할 수 있게 되었다. 특히 match의 예시를 살펴보니 c++ 같은데서 사용했던 기존 case문과는 달리 case에 선택지가 넓기 때문에 기존 if-else 체인과 비교해보아도 충분히 경쟁력 있다고 생각된다. 사용하는 방법은 기존 switch 문과 똑같다. match value, 이후 value에 들어올 값들을 체인을 이어주면 된다. match value: case value1: # 동작1 case value2: # 동작2 ... 하지만 value에 들어갈 수 있는 것이 어떤것이든 가능하다..
Python : Itertools 조합형 이터레이터
2023. 3. 24. 16:36
Python/Python
간혹가다가 내가 가진 자료 구조에서 순열 혹은 조합에 의거해서 요소를 뽑아야할 때가 있다. 루프를 돌려서 하려면 번거롭기 때문에, 이럴 때에는 itertools에서 permutation, combination, combination with replacement, product를 사용하면 매우 편하게 출력할 수 있다. 공통적으로 순서쌍들을 튜플에 담긴 iterable한 객체로 반환하니, 리스트 같은데 담거나 for를 사용하여 루프를 돌려 사용하면 된다. next()를 사용해도 되지만 굳이...? from itertools import permutations newList = [i for i in range(3)] for i in permutations(newList, 2): print(i, end=' '..
Python : 표현식(Comprehension)
2023. 3. 24. 11:08
Python/Python
python에서 한줄로 자료구조를 생성할때 사용하는 comprehension 기능을 정리해볼까 한다. comprehension을 사전에서 검색해보면 이해력이라는 단어가 나오는데 사실은 함축, 내포라는 의미로 사용한 게 아닐까? 만약 그렇다면 왜 comprehension이라는 단어를 썼는지 이해는 간다. 이해력보다는 말이다. 컴프레헨션, 선언과 동시에 자료구조를 채워버리는 방법이다. 그 경제력은 코드만으로도 알아볼 수 있다. A = [] for i in range(10): A.append(i) B = [i for i in range(10)] A 와 B는 같은 리스트지만 A를 생성하는데에는 약 3줄이, B를 생성하는데에는 1줄이 필요했다. 여기서 조건이 여러개 필요하다거나 하면 A는 더 늘어나야만 할것이다...
나의 첫 Django Project : community - 5 -
2023. 3. 23. 20:46
Python/Django
솔직히 말하자면 여기서 부터는 내가 한 것이 거의 없다. 남이 만든 코드들을 보면서 내용을 추론하고 기여붙인 것 밖에 없다. 이게 정상적인 과정인지도 잘 모르고, 무슨 일이 일어날지 모른다. 다만 작동 자체는 문제 없었다. 미리 보여주는 최종 디렉토리 구성. django project와 mysql, nginx를 각각 분리하였고, docker-compose.yml은 최상위 디렉토리에, Dockerfile은 각 디렉토리에 배치했다. db 폴더속에 .env는 db 연결시 필요한 계정 정보를 분리한 것이다. nginx 폴더에 있는 두 .conf 파일은 서버 설정을 위해 작성한 것이다. 프로젝트를 만들 당시에 이게 무슨 의미일지 알아볼 생각도 못했으나 지금은 이해할 수 있는 범위까지 무슨 의미인지 살펴볼 것이다...
Python : 클로저(Closure), 데코레이터(Decorator)
2023. 3. 23. 14:16
Python/Python
오늘도 데코레이터에 대한 설명이 충분치 않아 이에 대한 설명을 더 찾아보았다. 설명을 찾으려고 보니 데코레이터를 설명하기 이전에 클로저를 설명하는 글이 많았는데, 이를 찬찬히 살펴보니 데코레이터의 구현의 대부분이 클로저를 이용하여 이루어지기 때문이라고 나는 이해했다. 클로저에 대해 알아보기 전에 중첩함수와 자유변수를 먼저 알아보자. 중첩함수란 함수 내부에서 정의된 함수를 의미하는데 함수 내부에서만 호출 가능하기 때문에 로직을 분리하거나 캡슐화를 위해 사용된다. 아래 예제에서 inner_function은 중첩함수이다. 자유변수란 매개변수도, 지역변수도 아니면서 함수 외부에서 정의되었지만 함수 내부에서 사용하는 변수를 말한다. 아래 예제에서 inner_function 입장에서는 x는 자유변수다. def ou..
Python : 컨텍스트 관리자, with <객체> as <변수명>
2023. 3. 23. 09:47
Python/Python
file을 오픈할 때 쓰는 with as 구문. 보통 파일을 오픈한 뒤 자동적으로 close 해주는 구문으로 알고 있는데, 이 기능 하나만 가지고 이런 구문이 생겼을거라 생각되지 않아 추가적으로 찾아보게 되었다. 결론적으로 말하면 file을 오픈할 때만 쓰는 것이 아닌 쓰레드를 락인해놓고 자동적으로 푼다거나 데이터베이스 연결을 한 뒤 자동적으로 닫거나 하는 경우처럼 사용 뒤에 자동적으로 무언가 나가거나 끌 필요가 있을 때 사용된다는 걸 알게 되었다. with as 객체가 중간에 나와서 당황했지만 흔히 쓰는 파일 오픈을 위해 open()을 쓰는 경우는 open()의 결과로 file 객체가 리턴되기 때문인 것도 추가적으로 알게 되었다. 이 구문의 이름은 컨텍스트 관리자로 리소스의 할당과 해제를 위해 만들어졌..
나의 첫 Django Project : community - break -
2023. 3. 21. 16:44
Python/Django
사실 Django 자체는 저런 형식으로 Model, View, Template, url_conf를 전부 완성하면 끝이다. 로컬에서 돌리기만 할거라면 저기서 멈추어도 상관없다. 하지만 반년전의 내가 이왕 만든거 서비스는 해봐야지 하고 AWS EC2에 올려 실행하는 것까지 진행했기 때문에 이에 대해서 써보자 한다. 설명하기 앞서서 내가 만든 사이트를 간단히 소개하고자 한다. 구현한 기능들은 로그인/회원가입/유저정보수정/ 과 게시판 생성/글&댓글 CRUD 정도의 기능을 가졌다. 페이지 레이아웃은 별볼일 없다. 로그인이나 회원가입시 validation을 진행하여 성공 혹은 실패시 메시지가 뜨도록 설정하였다. 로그인에 성공하면 게시판 홈으로 이어지는데, 게시판은 로그인한 유저라면 누구든지 생성가능 하다. 게시판 ..
나의 첫 Django Project : community - 4 -
2023. 3. 21. 14:27
Python/Django
야심차게 시작하고 마친 프로젝트이지만 습관의 미비로 블로그에 과정을 적는 걸 완성하지 못했다. 다른 요소들을 추가하다가 블로그에 소홀히 하게 되었다. 비록 오래전에 만든 프로젝트이기에 허접하지만, 코드들을 다시 톳아보며 django 프로젝트를 복습할 것이다. 지난 글에서는 model을 정의하고 DB에 생성하는 migrate 까지 완료했다. 이제는 동작을 지정하는 View와 이를 보여주는 Templete을 구성해보자. 웹사이트를 구성하는 가장 중요한 기능은 로그인과 유저 기능이라고 생각했기에 이를 먼저 만들었다. View와 Template으로 넘어가기 이전에 Form을 소개 하겠다. Template에서 폼을 직접 생성하고 View에서 받는 걸로도 할 수 있지만, Django에서는 python 코드로 For..