제너레이터, 이터레이터, 코루틴
2023. 4. 19. 20:54
Python/Python
선 요약 1. 이터레이터는 next()를 통해 다음 값을 반환하는 객체이다. 2. yield 는 값의 변환과 함께 함수의 일시정지를 해주는 키워드이다. 3. 제너레이터는 이터레이터를 생성하는 함수이다. yield 키워드를 이용한다. 4. 코루틴은 일시정지와 재개가 가능한 서브루틴이며 이때 yield 키워드를 사용한다. 이터레이터는 값을 순차적으로 꺼낼 수 있는 객체이다. 보통 iterable한 객체로 부터 생성할 수 있는데, 필요시마다 next()를 호출하여 값을 받아올 수 있는 편리한 객체이다. 제너레이터는 yield 키워드를 이용하여 이터레이터를 생성하는 함수이다. 자세히 알아보기 전에 yield 키워드를 알아보자면, return 함수와 같이 반환을 하면서 동시에 메모리를 저장하여 중단점을 만들어주는..
Python : match
2023. 4. 6. 01:11
Python/Python
지금껏 python에는 switch 문이 없는 줄 알았다. 근데 최근 python 3.10에서 새로 생겼다는 걸 오늘에서야 처음 알게되었다. 바로 Match. match를 이용하여 직관적으로 그리고 더 편하게 값을 비교할 수 있게 되었다. 특히 match의 예시를 살펴보니 c++ 같은데서 사용했던 기존 case문과는 달리 case에 선택지가 넓기 때문에 기존 if-else 체인과 비교해보아도 충분히 경쟁력 있다고 생각된다. 사용하는 방법은 기존 switch 문과 똑같다. match value, 이후 value에 들어올 값들을 체인을 이어주면 된다. match value: case value1: # 동작1 case value2: # 동작2 ... 하지만 value에 들어갈 수 있는 것이 어떤것이든 가능하다..
Python : Itertools 조합형 이터레이터
2023. 3. 24. 16:36
Python/Python
간혹가다가 내가 가진 자료 구조에서 순열 혹은 조합에 의거해서 요소를 뽑아야할 때가 있다. 루프를 돌려서 하려면 번거롭기 때문에, 이럴 때에는 itertools에서 permutation, combination, combination with replacement, product를 사용하면 매우 편하게 출력할 수 있다. 공통적으로 순서쌍들을 튜플에 담긴 iterable한 객체로 반환하니, 리스트 같은데 담거나 for를 사용하여 루프를 돌려 사용하면 된다. next()를 사용해도 되지만 굳이...? from itertools import permutations newList = [i for i in range(3)] for i in permutations(newList, 2): print(i, end=' '..
Python : 표현식(Comprehension)
2023. 3. 24. 11:08
Python/Python
python에서 한줄로 자료구조를 생성할때 사용하는 comprehension 기능을 정리해볼까 한다. comprehension을 사전에서 검색해보면 이해력이라는 단어가 나오는데 사실은 함축, 내포라는 의미로 사용한 게 아닐까? 만약 그렇다면 왜 comprehension이라는 단어를 썼는지 이해는 간다. 이해력보다는 말이다. 컴프레헨션, 선언과 동시에 자료구조를 채워버리는 방법이다. 그 경제력은 코드만으로도 알아볼 수 있다. A = [] for i in range(10): A.append(i) B = [i for i in range(10)] A 와 B는 같은 리스트지만 A를 생성하는데에는 약 3줄이, B를 생성하는데에는 1줄이 필요했다. 여기서 조건이 여러개 필요하다거나 하면 A는 더 늘어나야만 할것이다...
Python : 클로저(Closure), 데코레이터(Decorator)
2023. 3. 23. 14:16
Python/Python
오늘도 데코레이터에 대한 설명이 충분치 않아 이에 대한 설명을 더 찾아보았다. 설명을 찾으려고 보니 데코레이터를 설명하기 이전에 클로저를 설명하는 글이 많았는데, 이를 찬찬히 살펴보니 데코레이터의 구현의 대부분이 클로저를 이용하여 이루어지기 때문이라고 나는 이해했다. 클로저에 대해 알아보기 전에 중첩함수와 자유변수를 먼저 알아보자. 중첩함수란 함수 내부에서 정의된 함수를 의미하는데 함수 내부에서만 호출 가능하기 때문에 로직을 분리하거나 캡슐화를 위해 사용된다. 아래 예제에서 inner_function은 중첩함수이다. 자유변수란 매개변수도, 지역변수도 아니면서 함수 외부에서 정의되었지만 함수 내부에서 사용하는 변수를 말한다. 아래 예제에서 inner_function 입장에서는 x는 자유변수다. def ou..
Python : 컨텍스트 관리자, with <객체> as <변수명>
2023. 3. 23. 09:47
Python/Python
file을 오픈할 때 쓰는 with as 구문. 보통 파일을 오픈한 뒤 자동적으로 close 해주는 구문으로 알고 있는데, 이 기능 하나만 가지고 이런 구문이 생겼을거라 생각되지 않아 추가적으로 찾아보게 되었다. 결론적으로 말하면 file을 오픈할 때만 쓰는 것이 아닌 쓰레드를 락인해놓고 자동적으로 푼다거나 데이터베이스 연결을 한 뒤 자동적으로 닫거나 하는 경우처럼 사용 뒤에 자동적으로 무언가 나가거나 끌 필요가 있을 때 사용된다는 걸 알게 되었다. with as 객체가 중간에 나와서 당황했지만 흔히 쓰는 파일 오픈을 위해 open()을 쓰는 경우는 open()의 결과로 file 객체가 리턴되기 때문인 것도 추가적으로 알게 되었다. 이 구문의 이름은 컨텍스트 관리자로 리소스의 할당과 해제를 위해 만들어졌..