728x90

분류 전체보기 68

[Python] Comprehension?

파이썬에서 사용할 수 있는 컴프리헨션은 List, Set, Dict 컴프리헨션이 있고, 이번 포스팅에서는 대표적으로 List로 컴프리헨션에 대해 알아보자. List 컴프리헨션이란 반복되거나 특정 조건을 만족하는 리스트를 보다 쉽게 만들어 내기 위한 방법으로 아래와 같이 사용할 수 있다. >>> [i for i in range(10)] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> [i * 2 for i in range(5)] [0, 2, 4, 6, 8] 위와 같이 반복문을 사용하는 것 외에도 조건문을 추가로 사용하여 리스트를 만들 수 있다. >>> [i for i in range(20) if i % 2 == 0] [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] >>> [i..

🐍Python | Django 2022.05.20

[Python] Type Check - type(), isinstance()

type() type()의 경우 파이썬에서 기본적으로 제공하는 자료형에 대해 type check가 가능하다. type(1) is int # True type([]) is list # True type('abc') is str # True type(1) is type(2) # True 하지만, type()은 상속의 경우가 고려되지 않아 상속받은 클래스의 인스턴스는 구분할 수 없다. class A(): pass class B(A): pass a = A() b = B() type(a) is A # True type(b) is B # True type(b) is A # False 이러한 문제를 해결하기 위해서는 어떤 메서드를 사용해야 할까? isInstance() type()의 한계점을 isInstance()로..

🐍Python | Django 2022.05.18

[Python] lstrip(), rstrip(), strip()

개발을 하다 보면 문자열 끝의 공백을 제거한다거나, 특정 문자를 제거해야 하는 경우가 은근히 자주 발생하여 한번 정리해두면 두고두고 보겠구나라는 생각이 들어, 한번 정리해두려고 한다. 파이썬에서는 strip()이라는 함수를 제공하며, strip()을 이용하면 특정 문자를 제거할 수 있다. 기본적인 사용 방식은 아래와 같다. - strip([chars]) : 인자로 전달된 문자를 양쪽에서 제거 - lstrip([chars]) : 인자로 전달된 문자를 왼쪽에서 제거 - rstrip([chars]) : 인자로 전달된 문자를 오른쪽에서 제거 인자를 전달하지 않을 수도 있으며, 전달하지 않는 경우 기본적으로 공백을 제거한다. 아래의 예시를 보자. string = ' Hello World! ' print('stri..

🐍Python | Django 2022.05.17

[Python] __new__ ? __init__ ?

파이썬 프로그래머라면 생성자에 관해 들어본 적이 있을 것이고, __init__ 메서드는 생성자 메서드라는 것도 알고 있을 것이다. 하지만, 한 가지 짚고 넘어갈 점은 __init__메서드는 클래스 오브젝트에 메모리를 할당하지 않는다는 것이다. 😮 이 말은 __init__ 메서드는 인스턴스를 생성하지 않는다는 말인데... 그러면 __init__을 생성자라고 할 수 있을까..? 😳 즉, __init__ 메서드는 객체가 생성되어 초기화되는 즉시 호출되기는 하지만, 메모리는 할당하지 않는 메서드이다. 그렇다면, 실제로 메모리를 할당하는 메서드는 무엇일까? 바로 __new__ 메서드이다. 파이썬에서 객체를 생성해보면, __init__이 실행되기 전 항상 __new__가 먼저 실행되며 이때 객체에 메모리가 할당된다..

🐍Python | Django 2022.05.16

[Django] ORM Eager Loading(select related & prefetch_related)

ORM QuerySet의 특징 포스트에 이어서 Eager Loading에 대해 알아보자. 💡 https://dev-jy.tistory.com/23 [Django] QuerySet?! 장고 쿼리셋의 특징 중 Lazy Loading, Caching, Eager Loading에 대해 알아보자. 🤔 Lazy Loading 먼저, ORM은 게으르다. 😴 from prod.models import Product product = Product.objects.fitler(name='제품A') pr.. dev-jy.tistory.com Django ORM은 기본적으로 Lazy Loading 전략을 택하기 때문에, 아래의 예시처럼 N+1문제가 발생할 수 있다. 🤬 from board.models import Board ..

🐍Python | Django 2022.05.15

[Django] QuerySet method

django의 쿼리셋에서 사용할 수 있는 메서드들에 대해 알아보자. SELECT all() 테이블 내의 모든 데이터를 조회하여, 쿼리셋 타입으로 반환해준다. Product.objects.all() # get() 하나의 데이터를 조회하기 위한 메서드이며, 주로 pk로 조회한다. 결과가 1건 이상인 경우 에러를 발생시키고, 객체 타입으로 반환된다. Product.objects.get(id=1) # filter() 특정 조건에 맞는 row들만 조회할 때 사용하고, 쿼리셋으로 반환된다. Product.objects.filter(Group_id = 1) # exclude() 특정 조건을 제외한 데이터만 조회하고 싶을 때 사용한다. 쿼리셋으로 반환된다. Product.objects.exclude(Group_id =..

🐍Python | Django 2022.05.12

[Django] QuerySet?!

장고 쿼리셋의 특징 중 Lazy Loading, Caching, Eager Loading에 대해 알아보자. 🤔 Lazy Loading 먼저, ORM은 게으르다. 😴 from prod.models import Product product = Product.objects.fitler(name='제품A') print(product) 위와 같은 코드를 작성한 후 실행해보면, 실제 DB hits는 몇 번 일어날까? 정답은 1번이다. filter 할 때는 DB hits가 일어나지 않고 마지막 'print(product)'에서 DB hits가 일어난다. 장고 ORM은 QuerySet이 evaluated 될 때까지, 실제로 DB에 접근해 쿼리를 실행하지 않는다. 그렇다면 QuerySet이 evaluated 되는 시점은..

🐍Python | Django 2022.05.12

[Python] generator

generator를 간단히 설명하면, iterator를 생성해주는 function이다. ※ iterator? https://dev-jy.tistory.com/20 [Python] iterable? iterator? iterable? iterator? iterable의 의미는 요소를 하나씩 차례로 반환 가능한 object를 뜻한다. iterable의 예로는 sequence type인 list, str, tuple 등이 있고, non-sequence type인 dict나 file도 iterable 하다.. dev-jy.tistory.com 아래의 예시를 보자. def generator(n): i = 0 while i < n: yield i i += 1 얼핏 보면 일반 함수와 비슷해 보이지만, yield라는 ..

🐍Python | Django 2022.05.09

[Python] iterable? iterator?

iterable? iterator? iterable의 의미는 요소를 하나씩 차례로 반환 가능한 object를 뜻한다. iterable의 예로는 sequence type인 list, str, tuple 등이 있고, non-sequence type인 dict나 file도 iterable 하다고 말할 수 있다. (for문을 통해 순차 접근 가능) 또한, __iter__() 나 __getitem__() 메서드를 포함하는 class는 모두 iterable하다고 말할 수 있다. iterator 객체는 __next__() 메서드로 iterable한 객체의 데이터에 순차적으로 접근할 수 있다. 만약 __next__()로 다음 데이터를 불러올 수 없을 경우 StopIteration exception을 발생시킨다. 그렇다..

🐍Python | Django 2022.05.08

[Python] GIL

먼저 GIL에 대해 알아보기 전에 파이썬 인터프리터에 대해 한 번 짚고 넘어가자. 인터프리터란 파이썬으로 작성된 코드를 한 줄씩 읽으며 실행하는 프로그램을 말하는데, 현재 파이썬 인터프리터의 표준 구현체로 받아들여지고 있는 것은 C언어를 이용하여 구현한 CPython이다. GIL은 Global Interpreter Lock의 약자이다. 파이썬의 객체들에 대한 접근을 보호하는 일종의 뮤텍스(Mutex)로써, 여러 스레드가 동시에 파이썬 코드를 실행하지 못하도록 막는 것이다. 뮤텍스(Mutex)란, 멀티 스레딩 환경에서 여러 개의 스레드가 어떤 공유 자원에 접근하려 할 때 접근하기 위해 가지고 있어야 하는 키 같은 것이다. 식당에서 공용 화장실을 사용하기 위해 열쇠를 들고 화장실을 가고, 사용 중인 사람이 ..

🐍Python | Django 2022.05.07

[Python] Python의 메모리 관리

파이썬에서는 모든 것이 객체이고, 동적 메모리 할당이 파이썬 메모리 관리의 기초이다. 동적 메모리 할당이랑 런타임 시 메모리가 할당되는 것으로 객체가 더 이상 필요하지 않으면 파이썬 메모리 관리자가 자동으로 객체에서 메모리를 회수한다. 메모리 관리는 reference counting과 generational garbage collection 두 가지 방법으로 이루어 진다. Reference Counting 파이썬에서는 객체를 만들 때마다 객체의 유형과 reference count를 private heap에 생성한다. 기본적으로 파이썬 객체의 reference count는 객체가 참조될 때마다 증가하고 객체의 참조가 해제될 때 감소하는 방식으로 작동하고, 이때 reference count가 0이 되면 객체..

🐍Python | Django 2022.05.03
728x90