분류 전체보기
파이썬 코루틴 Coroutine
Coroutine 의 개념 yield 키워드 : 메인 루틴과 서브 루틴의 연결 기능을 해준다. 멈춰있다가 다음 루틴을 제어 코루틴의 제어, 코루틴 상태, 양방향 값 전송을 알아본다. yield from 코루틴 서브 루틴 : 메인 루틴에서 리턴에 의해 호출 부분으로 돌아와 다시 프로세스 쓰레드 : 지금까지 해온것은 싱글 쓰레드 작업, 멀티 쓰레드는 공유 자원의 교착 상태를 관리해야 하기 때문에 복잡하다. 컨텍스트 스위칭 비용 발생과 자원 소비 비용 고려 코루틴 루틴 실행 중 멈춤 가능, 특정 위치로 돌아갔다가 다시 원래 위치로 돌아와 수행 비동기 처리 방식으로 동시성 프로그래밍을 구현할 수 있다. 코루틴은 제너레이터를 기반으로 작동함 코루틴은 스케쥴링 오버헤드가 매우 적다. (= 컨텍스트 스위칭 비용이 적..
파이썬 제너레이터
반복 가능한 객체 (iterable object) 반복형 객체(for, collections, text file, List, Dict, Set, Tuple, unpacking, *args) 반복형 객체는 내부적으로 iter(x) 함수를 호출한다. yield from t = 'ABCDEF' # while 사용 w = iter(t) while True: try: print(next(w)) except StopIteration: # next() 가 더 이상 없음 break # 반복형 확인 print(hasattr(t, '__iter__')) # True print(isinstance(t, abc.Iterable)) # True next() 를 사용하는 순회 객체 클래스에 매직 메소..
파이썬 클래스 특별 메소드
iter 메소드가 있다는 것은 for를 사용해 순회하며 next() 를 이용 한다는 것! __x 등 과 같이 더블 언더스코어 변수는 private 하다. 파이썬 코드 컴벤션 # 프로퍼티 메타 디스크립션. 데코레이터를 활용한 디스크립션이 걸리는것. # class 선언 class VectorP(object): # private 선언 def __init__(self, x, y): self.__x = float(x) self.__y = float(y) def __iter__(self): return (i for i in (self.__x, self.__y)) # Generator # @property 마치 getter @property def x(self): return self.__x # @x.setter 는..
파이썬 Reference참조형
파이썬은 콜바이오브젝트 형식을 따르지만 다른 언어와 같이 참조형의 특징을 가지는 경우가 있다. eq와 id 비교의 경우 x = {'name':'kim', 'age':20} y = x print(id(x), id(y)) # 3186614069352 3186614069352 로 똑같이 출력 된다. print(x == y) # True print(x is y) # True x['city': 'seoul'] # 둘 다 추가됨 print(x, y) # {'name': 'kim', 'age': 20, 'city': 'seoul'} {'name': 'ki..
파이썬 데이터 모델 - 네임드튜플
객체 → 파이썬의 데이터를 추상화한다. 데이터 자체가 객체임 모든 객체는 id로 관리된다. Namedtuple 일반적인 튜플의 사용하는 예제 # 튜플은 리스트보다 속도가 빠름. # 두 점 사이의 거리를 구하는 공식 pt1 = (1.0, 5.0) pt2 = (2.5, 1.5) from math import sqrt # 제곱근 line_leng1 = sqrt((pt2[0] - pt1[0]) ** 2 + (pt2[1] - pt1[1]) ** 2) 네임드 튜플을 선언해 사용하는 예제 from collections import namedtuple # 네임드 튜플 선언 point = namedtuple('point', 'x y') # 가짜로 사용할 이름을 정하는것. # 두 점을 선언 p..
파이썬 Class 데코레이터
Class Method @를 사용하는 클레스 데코레이터를 이용한다. @classmethod 파이썬 인터프리터에게 알려주는것 클래스 메소드는 self로 인자를 받는것이 아닌 공용 변수 이기때문에 cls로 받는다. 파라미터는 일반 함수와 같다. class class_name(object): class_var = 0 def __init__(self, arg_one, arg_two): self._arg_one = arg_one self.__arg_two = arg_two # 모든 인스턴스가 접근하는 클래스 변수를 조작한다. @classmethod def method_name(cls, arg): cls.class_var = arg # 클래스 변수를 조작한다. class method를 이용하여 생성자를 만드는 방법..