0327 TIL

looggi·2023년 3월 27일
0

TILs

목록 보기
47/114
post-thumbnail

스터디 문제 풀기

➡️ 수찾기 다른 풀이

import bisect

n = int(input())
nlist = list(map(int, input().split()))
nlist.sort()

m = int(input())
mlist = list(map(int, input().split()))


for num in mlist:
    i = bisect.bisect_left(nlist, num)
    if num == nlist[i]:
        print(1)
    else:
        print(0)

bisect_left(list, x) 정렬된 list에서

  • x가 리스트에 있다면 x의 앞에 x를 삽입하는 꼴이 되기때문에 x의 인덱스를 반환해주고
  • x가 리스트에 없다면 x가 리스트의 정렬 순서상 삽입될 위치의 인덱스를 반환해준다

bisect_right(list, x) == bisect(list, x)

  • x가 리스트에 있다면 마지막으로 나타난 x의 바로 뒤 인덱스를 반환해주고
  • x가 리스트에 없다면 삽입될 위치의 인덱스를 반환해준다

바이섹트 자체가 num이 nlist에 없어도 삽입될 위치를 반환해주는데 만약 a에 있는 것보다 큰 수를 삽입하게 되면 인덱스가 넘어가기때문에 i<len(nlist)가 필요하고 nlist에 있는 것보다 작은 수를 삽입하게 되면 인덱스를 원래 값의 인덱스들을 하나씩 밀기때문에 num=nlist[i]인지도 확인을 해줘야한다

django

ORM 함수

Django ORM은 SQL없이 python으로 DML을 수행할 수 있도록 해주는 도구이다.
작성한 모델을 기반으로 테이블을 만들어주고 모델간의 관계에 따라 자동으로 중간 테이블을 만들어주기도 한다.
모델의 실례라고 볼 수 있는 인스턴스는 데이터베이스의 레코드에 해당한다
lazy-loading을 통해 불필요한 쿼리를 줄여준다

장고 ORM을 작성할 때는 모델_클래스.objects.조건 형식으로 하는데
여기서 objects는 Django ORM Manager로 모델과 데이터베이스 간의 인터페이스 역할을 한다
User.objects.all은 User 모델의 모든 레코드를 다 불러오고
User.objects.filter(is_active=True)는 is_active 속성이 True값인 것만 필터링해서 불러온다

ORM으로 처리된 로직은 쿼리셋의 형태로 반환되어 변수에 할당할 수 있다
쿼리셋은 iterable해서 이터레이터로 쓸 수 있다

집계 함수

aggregate() 메소드를 통해서 집계 함수를 사용할 수 있다 Sum, Count, Avg, Min, Max
*집계 함수는 집계에 사용되는 칼럼 값이 null인 경우 집계에서 제외한다
User.objects.aggregate(인원수=Count('id'))
count는 자주 사용되는 함수로 aggregate를 사용하지 않고도 사용할 수 있다
User.objects.count()

https://www.qu3vipon.com/django-orm

정참조와 역참조

select_related(), prefetch_related()
쿼리 갯수를 줄일 수 있다 하나의 쿼리셋을 가져올 때 related objects까지 모두 불러옴
불러온 데이터들이 캐시에 남아있어 DB에 접근할 필요가 없어 서비스 성능을 향상시켜준다

select_related():
OnetoOne, ManytoOne 관게에서 역참조하는 단일 객체를 불러오거나 foriegnkey 필드로 연결된 정참조 객체를 불러올 때 사용

DB에서 INNER JOIN 쿼리가 수행된다

prefetch_related():
ManytoMany, ManytoOne 관계에서 정참조하는 다수의 객체를 불러오거나 foriegnkey 필드로 연결된 역참조 객체를 불러올 때 사용

DB에서 관계별로 DB 쿼리를 수행 후 파이선에서 조인

모델의 foriegnkey 필드에 related_name을 설정하면 해당 이름으로 역참조를 할 수 있고 따로 정하지 않으면 모델클래스_set으로 역참조가 가능하다

https://velog.io/@miretta96/Django-selectrelated%EC%99%80prefetchrelated

TestCode

TDD (Test Driven Development)

테스트 주도 개발
테스트 케이스를 먼저 작성한 후 실제 개발을 한다
하나의 테스트는 완전하지 않음을 가정하기때문에 테스트케이스는 통과 후 계속해서 확장해나가며 이를 통해 규모의 프로젝트를 완성한다
XP: 애자일 방법론 중 하나로 TDD를 한다
https://namu.wiki/w/%ED%85%8C%EC%8A%A4%ED%8A%B8%20%EC%A3%BC%EB%8F%84%20%EA%B0%9C%EB%B0%9C

testcode함수

import unittest
unittest 모듈을 임포트해서 쓸 수 있는 함수들
테스트케이스 함수는 test_테스트할_메서드_이름으로 명명한다

setUp() vs setUpClass()
클래스에 하나 이상의 테스트 메서드가 있는 경우 setUp()은 매 함수 실행 전에 실행되며 setUpClass()는 클래스 내의 모든 함수 실행 전에 한 번 실행되고 @classmethod 데코레이터와 cls 인자가 필요하다

tearDown() tearDownClass()도 마찬가지
해당 setUp() 메소드가 성공한 경우 호출됨
assertEqual()

profile
looooggi

0개의 댓글