전체 글
-
Django - 웹 서버Django 2021. 3. 29. 14:42
웹 클라이언트의 요청을 받아서 처리하는 서버를 웹 서버와 웹 애플리케이션 서버로 분류할 수 있다. CGI 방식의 단점 CGI는 프로그래밍 언어나 스크립트가 아닌 규격을 의미한다. 규격을 준수한다면 언어에 상관없이 구현이 가능하다. 전통적인 방식은 웹서버가 Python, C++등으로 만들어진 CGI 프로그램을 직접 호출하여 개별 프로세스를 생성하는 방식이다. CGI 방식은 각각의 클라이언트 요청에 대하여 독립적인 프로세스가 생성된다. 프로세스에 비례해 메모리 요구량도 커져서 시스템에 많은 부하를 줄 수 있다. 이런 이유로 현재는 거의 사용하지 않는다. CGI 방식의 대안 기술 스크립트 엔진(인터프리터)을 웹 서버에 내장시켜 오버헤드를 줄이는 방식이 있다. 파이썬의 경우 mod_wsgi 모듈을 사용하고 있다..
-
복잡도Algorithm 2021. 3. 27. 09:34
복잡도 복잡도(complexity)는 알고리즘의 성능을 나타내는 척도다. 복잡도는 시간 복잡도와 공간 복잡도로 나눌 수 있다. 시간 복잡도는 특정한 크기의 입력에 대하여 알고리즘이 얼마나 오래 걸리는지를 의미하고, 공간 복잡도는 특정한 크기의 입력에 대하여 알고리즘이 얼마나 많은 메모리를 차지하는지를 의미한다. 동일한 기능을 수행하는 알고리즘이 있다면 일반적으로 복잡도가 낮을수록 좋은 알고리즘이다. 시간 복잡도 : 알고리즘을 위해 필요한 연산의 횟수 공간 복잡도 : 알고리즘을 위해 필요한 메모리의 양 효율적인 알고리즘을 사용한다고 했을 때 보통 시간 복잡도와 공간 복잡도는 일종의 거래 관계(trade-off)가 성립한다. 메모리를 조금 더 많이 사용하는 대신에 연산을 생략하거나 더 많은 정보를 관리하면서..
-
파이썬 - News categorizationpython 2021. 3. 22. 18:08
여러 주제의 뉴스 글들이 있을 때 어떻게 비슷한 주제의 기사들끼리 묶을 수 있을까? 컴퓨터는 문자를 그대로 이해하지 못하기 때문에 문자를 Binary 형식으로 전환시켜야 한다. (문자 -> 숫자) 비슷한 주제로 묶으려면 숫자로 유사하다를 표현해야 한다. 유사하다는 가깝다라는 의미로 받아들일 수 있기 때문에 vector형식으로 전환시킬 수 있다. (문자 -> 숫자 -> 벡터) 문자를 Vector로 전환하는 방법은 여러가지가 있지만 단어의 빈도수를 카운팅하기에 효과적인 BOW를 이용한다. BOW(=Bag of Words, 단어별로 인덱스를 부여해서, 한 문장(또는 문서)의 단어의 개수를 vector로 표현) Bow의 상세한 설명과 예 : wikidocs.net/22650 / hleecaster.com/nlp..
-
파이썬 - 제너레이터 / 데커레이터python 2021. 3. 19. 21:05
제너레이터generator 제너레이터는 파이썬의 시퀀스를 생성하는 객체다. 제너레이터로 전체 시퀀스를 한 번에 메모리에 생성하고 정렬할 필요 없이, 잠재적으로 큰 시퀀스를 순회할 수 있다. 제너레이터는 이터레이터에 대한 데이터의 소스로 자주 사용된다. my_range() 함수는 제너레이터다(일련의 정수를 생성한다). 제너레이터는 실행될 때 함수를 실행하는 것이 아니라, 제너레이터 함수가 가진 객체를 반환한다. 제너레이터는 한번 생성해서 반환한 객체를 보관하지 않기 때문에, 이전의 코드를 실행한 후 추가한 코드를 실행하면 객체가 출력되지 않는다. 제너레이터를 순회할 때마다 마지막으로 호출된 항목을 기억하고 다음 값을 반환한다. 제너레이터는 일반 함수와 다르다. 일반 함수는 이전 호출에 대한 메모리가 없고,..
-
파이썬 - docstringpython 2021. 3. 19. 20:31
'가독성은 중요하다readability counts'라는 구절은 파이썬의 철학(www.python.org/dev/peps/pep-0020/)에 들어있는 구문이다. 함수의 docstring을 이용해서 함수 몸체 시작 부분에 문자열을 포함시켜 함수 정의에 문서(documentation)를 붙일 수 있다. >>> def echo(anything): ... 'echo returns its input argument' ... return anything docstring은 길게 작성할 수 있으며, 서식(formatting)을 추가할 수도 있다. def print_if_true(thing, check): ''' Prints the first argument if a second argument is true. Th..
-
파이썬 - 이터레이터python 2021. 3. 18. 21:55
이터레이터(Iterator)는 값을 차례대로 꺼낼 수 있는 객체다. 파이썬에서는 이터레이터만 생성하고 값이 필요한 시점이 되었을 때 값을 만드는 방식을 사용한다. 이 행위는 데이터 생성을 뒤로 미루는 것인데 이런 방식을 지연 평가(lazy evaluation)이라고 한다. 이터레이터는 반복자라고 부르기도 한다. 출처: 코딩도장 요소가 여러 개 들어있고, 한 번에 하나씩 꺼낼 수 있는 객체를 반복 가능한 객체라고 한다. 흔히 사용하는 문자열, 리스트,딕셔너리 등이 반복 가능한 객체다. 객체가 반복 가능한지 알기 위해선 객체에 __iter__ 메서드가 있는지 확인해보면 된다. >>> dir([1,2,3]) ['__add__', '__class__', '__contains__', '__delattr__', '..
-
파이썬 - 람다 함수python 2021. 3. 16. 23:28
lambda는 함수를 생성할 때 사용하는 예약어로 def과 동일한 역할을 한다. 람다 표현식은 식 형태로 되어 있다고 해서 람다 표현식(lambda expression)이라고 부른다. 보통 함수를 한줄로 간결하게 만들 때 작성하고 간편하기 때문에 다른 함수의 인수로 넣을 때 자주 사용한다. lambda 매개변수 : 표현식 def으로 표현된 함수를 lambda 표현식으로 바꿔보자 >>> def plus_ten(x): ... return x + 10 ... >>> plus_ten(1) 11 >>> plus_ten = lambda x: x + 10 >>> plus_ten(1) 11 람다 표현식은 변수에 할당하지 않고 표현식 자체를 바로 호출할 수 있다. 표현식을 괄호로 묶은 뒤에 인수도 괄호로 묶어서 뒤에 배..
-
파이썬 - 인수(argument)python 2021. 3. 16. 15:40
위치인수 positional argument 함수에 인수를 순서대로 넣는 방식을 위치 인수(positional argument)라고 한다. 즉, 인수의 위치와 갯수가 정해져 있다. ex) >>> print(10, 20, 30) 10 20 30 언패킹 Unpacking 인수를 순서대로 넣을 때 리스트나 튜플을 사용할 수 있다. 리스트 또는 튜플 앞에 *(애스터리스크)를 붙여 함수에 넣으면 된다. (언패킹, 말 그대로 리스트의 포장을 푼다는 뜻이다.) >>> def print_number(a, b, c): ... print(a) ... print(b) ... print(c) ... >>> x = [10, 20, 30] >>> print_number(*x) 10 20 30 리스트 변수 대신 리스트 앞에 *를 ..