python 5

이펙티브 파이썬 2nd 정리 #5

38. 간단한 인터페이스의 경우 클래스 대신 함수를 받아라 요약 간단한 인터페이스가 필요할때는 클래스를 만들고 인스턴스로 생성해서 쓰는 대신 간단하게 함수를 활용할 수 있다. 상세 defaultdict는 없는 키로 접근하는 상황에서 호출할 함수를 넘겨 받습니다. def log_missing(): print('Key added') return 0 # 특정상황에서 넘겨 준 log_missing함수를 실행 # 인자로 받는 함수를 훅이라고 함 current = {'green': 12, 'blue': 3} increments = [ ('red', 5), ('blue', 17), ('orange', 9), ] for key, amount in increments: result[key] += amount print(..

python 2023.09.08

이펙티브 파이썬 2nd 정리 #4

34. send로 제네레이터에 데이터를 주입하지 말라 요약 send()를 통해서 데이터를 제네레이터에 주입할 수 있다. 제네레이터는 send()로 주입돤 값을 yield식이 반환하는 값을 통해 받으며 이 값을 변수에 저장하여 활용 할 수 있다. send()와 yield from식을 함께 사용하면 제네레이터의 출혁에 None이 반환되는 의도하지 않은 결과를 얻을수도 있다. 합성할 제네레이터들의 입력으로 이터레이터를 전달하는 방식이 send()를 사용하는 방식보다 더 낫다. send()는 가급적 사용하지 않는것을 권장한다 제네레이터는 이터레이터를 생성하는 함수로, 함수 실행 중 yield 키워드를 사용하여 값을 반환하고 함수의 상태를 유지합니다. 제네레이터는 함수 호출과 달리 값을 한 번에 하나씩 반환하며,..

python 2023.09.01

이펙티브 파이썬 2nd 정리 #3

21. 변수 영역과 클로저의 상호 작용 방식을 이해하라 파이썬은 클로저를 지원한다 클로저 : 자신이 정의된 영역 외부의 변수를 참조하는 함수 파이선에서는 함수가 일급 시민 객체다 일급시민 : 객체를 직접 가리킬 수 있고, 변수에 대입하거나 다른 함수에 인자로 전달할 수 있으며 식이나 if문에서 함수를 비교하거나 함수에서 반환하는 것 등이 가능하다는 것을 의미한다. 파이썬에는 시퀀스(튜플 포함)를 비교하는 규칙이 존재한다 시퀀스를 비교할 때 각 시퀀스의 0번 인덱스를 비교합니다. 시작 부분의 요소가 같다면 다음 인덱스의 요소를 비교하고 요소가 같지 않다면 비교 결과를 반환합니다. 시퀀스의 값을 비교할 수 없는 경우 TypeError를 발생시킵니다. 파이썬에서 클로저를 사용할 때 변수 스코프가 어떻게 작동하..

python 2023.08.18

이펙티브 파이썬 2nd 정리 #2

18. __missing__을 사용해 키에 따른 디폴트 값을 생성하는 방법을 알아두라 ✅ setdefault, defaultdict를 사용하기 적당하지 않은 경우 __missing__을 사용하라 디폴트 값을 만드는 계산 비용이 높거나 만드는 과정에서 예외가 발생할 수 있는 상황에서는 dict의 setdefault 메서드를 사용하지 않는것을 권장한다. defaultdict에 전달되는 함수는 인자를 받지 않는다. 따라서 접근에 사용한 키 값에 맞는 디폴트 값을 생성하는 것이 불가능하다. 디폴트 키를 만들때 어떤 키를 사용했는지 반드시 알아야 하는 상황이라면 직접 dict의 하위클래스와 __missing__ 메서드를 정의하여 해결할 수 있다. # setdefault, defaultdict를 사용하기 적당하지 ..

python 2023.08.05

이펙티브 파이썬 2nd 정리 #1

5. 복잡한 식을 쓰는 대신 도우미 함수를 작성하라 ✅ 다른 언어에서는 처리하기 위해 if문을 사용하거나 별도 함수를 선언하여 처리할 수 있다. 하지만 파이썬에서는 이런 방식보다는 if expression을 사용하는게 깔끔하다. 빈 문자열, 빈 리스트, 0은 모두 False로 인식된다. red = my_values.get('빨강',[''])[0] or 0 green = my_values.get('초록',[''])[0] or 0 opacity = my_value.get('투명도', [''])[0] or 0 ✅ 조건을 판단하는 등 반복되는 로직이 있다면 별도의 함수를 작성해서 옮겨라. 비록 두세 번 밖에 사용되지 않더라도 작성하는걸 권장한다. def get_first_int(values, key, defal..

python 2023.07.28