들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다. 코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item66 요약 contextlib.contextmanager 데코레이터를 이용하면 __enter__, __exit__ 구현없이 with 절에서 사용할 수 있음. with 절은 with절 블록 안과 밖을 격리시키는 역할을 함. 다음 의미를 가짐. With절 안쪽은 특별한 Context를 가지고 실행됨을 의미함. With절 안 / 밖은 서로 다른 Context에서 실행됨. contextmanager 데코레이터를 사용한다면, try ~ finally와 yield를 함께 사용해줘야 함. contextmanager를 ..
요약 중첩 Case 문을 사용하는 것은 코드를 읽기 어렵게 만듦. 중첩 Case 문의 컨텍스트를 유지할 필요가 없다면, Case문에 Case를 중첩하지 말고 메서드로 빼서 Flat한 Case를 만드는 것이 좋을 것으로 판단됨. 함수로 풀어내기 이 코드는 리트코드 72번 문제를 풀면서 작성한 코드다. sol(_, _, I1, I2, DP) when I1 == 0 orelse I2 == 0-> {abs(I2-I1), DP}; sol(W1, W2, I1, I2, DP) -> {NewT1, NewDP} = case get(I1, I2, DP) of none -> case maps:get(I1, W1) =:= maps:get(I2, W2) of true -> sol(W1, W2, I1-1, I2-1, DP); _..
1. 가드 절에는 다양한 함수가 올 순 없음 가드 절에서는 사용자 정의 함수를 사용할 수는 없다. 가드 절에서 사용할 수 있도록 정의된 몇몇 함수만 호출할 수 있다. 2. If 절에서 마지막 부분은 항상 true로 처리 case ... of 문을 이용할 때, '아무거나 와도 상관없음'을 '_'로 표현했지만, If절은 'true'로 처리한다. If절은 패턴 매칭이 아니라 true / false를 판단하기 때문인 듯. 3. 함수와 클로저 handle_regular_file(Name, Queue) -> case filename:extension(Name) of ".erl" -> {continue, Name, fun() -> dequeue_and_run(Queue) end}; _NonErl -> dequeue_..
들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다. 코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item37 요약 딕셔너리, 긴 튜플이 여러 Depth로 내포되는 경우 클래스로 분리해 가독성 확보, 캡슐화를 하는 것이 필수다. Item 37. 내장 타입을 여러 단계로 내포시키기보다는 클래스를 합성하라. 파이썬은 딕셔너리 타입을 제공해준다. 딕셔너리에는 동적으로 Key / Value를 추가할 수 있다. 이것은 편리함도 있지만, 문제점을 가져오기도 한다. 딕셔너리를 사용할 때 고려해야할 점을 살펴보자. 딕셔너리는 동적으로 손쉽게 Key / Value를 추가할 수 있다. 따라서 확장이 쉽다. 쉬운 확장 때문에 여..
참고 https://docs.python.org/ko/3.11/whatsnew/3.11.html TypedDict에 Required / Non-Required 인자 추가 from typing import TypedDict, Required, NotRequired class Movie(TypedDict): title: str year: NotRequired[int] m1: Movie = {"title": "Black Panther", "year": 2018} # OK m2: Movie = {"title": "Star Wars"} # OK (year is not required) m3: Movie = {"year": 2022} # ERROR (missing required field title) 타입 힌트를..