본문 바로가기

전체 글

(18)
제네레이터(Generator)란? 제네레이터란? : iterator 를 생성해 주는 function 로서, iterator는 next() 메소드를 이용해 데이터에 순차적으로 접근이 가능한 object 이다. 제네레이터과 일반 함수와의 가장 큰 차이점은 yield 의 사용여부로 볼 수 있는데, 예시로 보는게 가장 빠를 듯 하다. 예제1) def generator(n): i = 0 while i < n: yield i i += 1 for x in generator(5): print x # 0 1 2 3 4 까지 순차 출력 실행순서를 보면 아래와 같다. 1. for 문 동작시, generator(5) 를 실행 2. generator 함수 내에서 yield i (=0) 라인에서 0을 반환 (generator는 상태유지) 3. for 문내 x 값..
클로저 (Closure) 클로저(Closure) 란? (Wiki 번역) 프로그래밍 언어에서의 클로저란 퍼스트클래스 함수를 지원하는 언어의 네임 바인딩 기술이다. 클로저는 어떤 함수를 함수 자신이 가지고 있는 환경과 함께 저장한 레코드이다. 또한 함수가 가진 프리변수(free variable)를 클로저가 만들어지는 당시의 값과 레퍼런스에 맵핑하여 주는 역할을 한다. 클로저는 일반 함수와는 다르게, 자신의 영역 밖에서 호출된 함수의 변수값과 레퍼런스를 복사하고 저장한 뒤, 이 캡처한 값들에 액세스할 수 있게 도와준다. 어렵다.. 직접 구현을 해보면서 보도록하자. 예제) 숫자를 여러번 입력 받아 누적하면서, 평균값을 구하는 기능을 구현해보자. - 클로저를 사용하지 않는 경우, # 결과를 누적하는 클래스 생성 class Averager..
추상화 클래스 (abstract class) 추상화클래스(abstract class)란? 구현을 위한 함수 정보(=메소드)만 가진 클래스이며, 상속받는 클래스에서 구현을 강제하기 위해 사용 - 사용법 > import abs (abstract base class의 약자)를 통하여 모듈을 가져오고 상속시킬 클래스 내의 추상메소드 위에 @abc.abstractmethod 를 붙인다. - 구현예제 1) 부모클래스 import abc # 부모클래스 class RandomMachine(abc.ABC): # metaclass=abc.ABCMeta(3.4 이하) # 추상 메소드 (자식 클래스에서는 반드시 구현해야한다) @abc.abstractmethod def load(self, iterobj): """ 내용이 없는 함수 """ # 추상 메소드 @abc.abst..
User 모델 확장 User 모델 확장이란? 기존 Django에 내장된 유저에 추가 필드들(성별 등)을 붙여 커스텀마이징 하는 것 - 확장 방식의 종류 1) proxy model 사용하기 2) 하나의 모델을 정의 후, User 모델과 One-to-One 관계 형성 3) AbstractBaseUser 4) AbstractUser - AbstractUser 사용 예 from django.db import models from django.contrib.auth.models import AbstractUser class CustomUser(AbstractUser): ... # 추가 정의 - 실제 사용 예 1) users App 생성 $ python manage.py startapp users 2) settings.py 내에 IN..
DB 모델링 설계 설계 순서 1) 필요한 컬럼들을 정의 2) 각 컬럼별 데이터 타입을 정의 - 키 종류 Primary Key (기본키) : 테이블 내의 데이터를 식별하는 값으로서, Django에서는 id가 디폴트로 지정되어있음 - 직접 지정하는 경우) id = models.AutoField(primary_key=True) Foreignkey (외래키) : 특정 테이블에서 다른 테이블의 기본키를 참조하는 값 1) Many-to-Many 2) Many-to-One 3) One-to-One 지원하는 Field Types - 공통인자 : Null=True/False => Nullable 여부 Fiedl Type Description CharField 작은 문자열 또는 큰 문자열을 위한 스트링 필드 TextField 큰 문자열 필..
Django 의 MTV 패턴 MTV 란? Django 프로젝트 내에서 유저의 요청부터 응답까지 동작하는 방식에 대한 패턴 중의 하나 M (model) : 데이터베이스에 저장되는 데이터 T (template) : 사용자에게 보여지는 부분 V (view) : 실질적으로 프로그램 로직이 동작하여 템플릿에 전달 MTV의 흐름 웹 클라이언트(요청) => View => Model (=> DB) => Template => 웹 클라이언트(응답)
PEP8 이란? PEP : Python Enhance Proposal (파이썬 개선 제안서) https://www.python.org/dev/peps/pep-0008/ 코딩컨벤션 (Coding Convention) 개발자들간에 코드를 읽고, 쓰고, 관리하기 쉬운 코드를 작성하기 위한 일종의 코딩 스타일 규약 - 주요 내용 1) 들여쓰기 : 공백은 4칸으로 사용, space 와 tab 은 혼용 사용 금지 2) 한 줄에 최대 79자까지 (옛날 해상도 기준 => 현재는 119자 까지도 무난) 3) 최상위 함수와 클래스 정의는 2줄씩 띄어 사용 4) import 는 항상 소스코드 최상단에 써야하며, 분리해서 작성 ex) import a, b => import a (다음줄) import b 5) 함수, 변수, 속성 : lower..
Flask - uWSGI 연동하여 서버띄우기 OS: CentOS7 대상 python 버전: python3.6 == uWSGI 설치 == 1. epel-release 패키지 설치 * EPEL: 리눅스 환경을 위한 엔터프라이즈 추가 패키지 저장소 => Fedora Project 에서 제공되는 저장소로 CentOS 표준 저장소에서 제공되지 않는 최신 버전의 패키지를 제공하는 저장소 yum -y install epel-release 2. ius 패키지 설치 * IUS : 엔터프라이즈 환경을 위한 (PHP, Python, Mysql ,Nginx 등) 최신 버전의 패키지를 제공 yum install \ https://repo.ius.io/ius-release-el7.rpm \ https://dl.fedoraproject.org/pub/epel/epel-rel..