들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다. 코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item40 요약 파이썬에서는 부모 클래스가 자동으로 초기화 되지 않는다. 다중 상속보다는 믹스인 클래스로 합성해라. 다중 상속을 사용할 경우, 메서드의 실행 순서는 mro를 따른다. (Class.mro() 호출한 순서대로 메서드가 호출됨). [부모 클래스].__init__()를 이용해 직접 부모 클래스를 초기화 할 수 있다. mro 순서와는 다르게 부모 클래스가 초기화 됨. (개발자에게 혼란을 가져옴) 이렇게 할 경우, 다이아몬드 상속에서 부모 클래스가 여러 번 초기화 된다. (개발자에게 혼란을 가져옴) 부모 ..
들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다. 코드 : 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를 추가할 수 있다. 따라서 확장이 쉽다. 쉬운 확장 때문에 여..