본문 바로가기
관리자

Programming-[Backend]/Python

(38)
파이썬 중급 - 8. 제너레이터 개념 되짚기, 코루틴 이해하기 코루틴 제너레이터 개념 되짚기 참조2의 예제를 참고하여 제너레이터의 caller - callee 개념을 이해하고나서 코루틴에 대해서 알아본다. callee 제너레이터를 호출하는 곳이 caller라고 보면, caller에서 next()로 callee를 호출할 때마다 아래 그림과 같은 과정이 진행된다. 여기서 유의할 점은 caller는 callee를 항상 호출하고 callee는 일방적으로 데이터를 caller에게 전달해주는 역할만 한다는 점이다. 이것이 일반적인 제너레이터의 개념이다. def callee(): yield 1 yield 2 x = callee() i = next(x) i = next(x) 코루틴 개념 위와 다르게 코루틴은 메인 루틴인 caller가 서브 루틴인 callee에게 데이터를 전달할 ..
파이썬 중급 - 7. 병행성 흐름: iter, hasattr, isinstance, stopIteration, Yield, itertools 이터레이터와 제너레이터 병행성 흐름을 이해하기 위해서 연결된 개념인 이터레이터와 제너레이터를 좀 더 깊이 이해할 필요가 있다. 이터레이터는 반복이 가능한 객체를 의미한다. 파이썬에서 기본적으로 반복이 가능한(iterable) 자료형들은 다음과 같다. collections, list, text file, Dict, Set, Tuple, unpacking, *args… __iter__의 구현방식 반복가능한 객체는 dir()로 확인 시 iter 메서드를 포함하고 있다. 다시 말해 iter() 함수를 내부적으로 호출한다는 것이다. 확인을 위해서 직접 반복 가능한 문자열 객체를 iter() 함수에 대입해보자. iter()함수를 문자열 w에 적용하고, 적용된 t 변수에서 dir(t) 의 출력 시, __next__ ..
파이썬 중급 - 6. 고위 함수(Higher Order Function), 클로저(Closure) 기본 클로저 심화 클로저 개념 제대로 알기 지난 글에서 다뤘던 클로저에 대해서 제대로 알아본다. 외부에서 호출된 함수의 변수값이나 상태를 복사 후 저장하는 것이 클로저의 개념이였다. 이렇게 값을 저장해놓고 나중에 접근할 수 있도록 한다. 함수 내부에 다른 함수를 두어 자유 변수(Free variable)을 기억하도록 만들 수 있다. 평균값을 구하는 averager를 클로저를 이용하여 작성해본다. 처음 closure_ex1을 실행했을 때는 함수 자체가 반환되는 것을 확인할 수 있다. 그리고 나서 변수값을 넣을 때마다, 클로저 영역에 있는 series에 값이 누적되면서 결과가 출력되는 것을 확인할 수 있다. # Closure 사용 def closure_ex1(): # Free variable # 클로저 영역 se..
파이썬 중급 - 5. 고위 함수(Higher Order Function), 클로저(Closure) 기본 파이썬 함수 특징 런타임 초기화 변수 할당 가능 함수 인수 전달 가능 함수 결과 반환 가능(return) 함수는 클래스가 갖는 매직메서드도 갖고 있다. 함수나 클래스에 포함된 함수 목록을 조회하는 dir 함수를 통해서 클래스 부분은 제외하고 함수 부분에만 있는 함수 목록을 확인해볼 수 있다. 강의에서는 factorial 함수를 예시로 들면서 설명한다. 다음 내용에서 배울 closure, call 등이 있는 것을 볼 수 있다. def factorial(n): '''Factorial Function n: int''' if n == 1: return 1 else: return n * factorial(n-1) class A: pass print(factorial(5)) print(factorial.__doc_..
파이썬 중급 - 4. 해시테이블(Dictionary), Set Dictionary 파이썬은 기본적으로 dict형을 제공하며, 해시 테이블 자료구조로 구현되어있기 때문에 따로 해시 테이블을 구현할 필요가 없다. 아래 명령어로 출력해보면 파이썬의 코드 자체가 dict형태로 구현된 것을 볼 수 있다. print(__builtins__.__dict__) # {'__name__': 'builtins', '__doc__': "Built-in functions, exceptions, and other objects.\\n\\nNoteworthy: None is the `nil' object; Ellipsis r..... 각 객체의 고유한 key값인 hash값은 hash() 함수로 확인할 수 있다. 다만 mutable한 자료형은 변경이 가능하므로 hash값을 확인할 수 없다. t..
파이썬 중급 - 3. 시퀀스, 제너레이터, sorted, unpacking, immutable 등 시퀀스 시퀀스 기본 https://wikidocs.net/84391 파이썬에는 3가지 시퀀스 자료형이 있다. 문자열 : 문자열(string) ‘Hello’는 문자(character)들의 시퀀스이다. 리스트 : [1, 4, 5] 튜플 : (’GOOD’, 100, 121.12) 모든 시퀀스는 순서가 유지되고, 정수로 인덱싱하며 길이가 있다. 자료형 구분 정리 컨테이너와 플랫 컨테이너(container): 서로 다른 자료형을 하나의 컬렉션에 담을 수 있는 것([list, tuple, collections.deque]) 플랫(Flat): 한 개의 자료형만 담을 수 있는 것([str, bytes, bytearray, array.array, memoryview]) 가변 vs 불변형 가변형(list, bytearra..
파이썬 중급 - 2. 매직 메서드, namedtuple 매직 메서드 기본 원리 n = 10 n + 100 이나, n.add(100)은 같은 결과를 낸다. 왜냐하면 type(n) == class ‘int’ 인데, int 내부의 add 메서드를 + 로 래핑해놓은 것이기 때문이다. 이것은 다른 의미로, add 메서드를 override하면 +의 연산 로직을 정의할 수 있다는 것이다. 아래 예시처럼 특정 인스턴스를 더했을 때, 각 인스턴스가 갖는 price값을 더해서 return하도록 만들어줄 수 있다. class Fruit: def __init__(self, name, price): self._name = name self._price = price def __str__(self): return 'Fruit Class Info : {} , {}'.format(sel..
파이썬 중급 - 1. 클래스와 메서드 1. 클래스 클래스를 사용하는 이유는 같은 변수나 메서드를 반복해서 작성할 필요없이 하나의 객체로 만들어서 다른 객체와의 상호작용을 편리하게 하기 위함이다. class Car(): def __init__(self, company, details): self._company = company self._details = details def __str__(self): return 'str : {} - {}'.format(self._company, self._details) def __repr__(self): return 'repr : {} - {}'.format(self._company, self._details) car1 = Car('Ferrari', {'color' : 'White', 'horsepow..