요약 try / except / else / finally절의 용도를 잘 이해하고 사용해라. finally : 예외가 발생하더라도 자원 정리를 해야 할 필요가 있을 때 사용한다. 파일을 닫는 작업 else : try가 성공했다고 가정하고 다음 작업을 할 때 사용해라. try에서 발생하는 예외가 무엇인지 범위를 좁혀줄 수 있음. try ~ else를 같이 쓸 때 try는 예외가 발생할 수 있는 부분, else는 예외가 전혀 발생하지 않는 부분으로 나눠주는 용도로도 쓸 수 있음. (명시적으로) 성공흐름 : try → else → finally 실패흐름 : try → except → finally else 문의 효능 else는 다음 목적으로 사용한다. 코드에서 처리할 예외 / 위로 던질 예외를 명확하게 구분할..
요약 None을 반환하면 조건문에서 0, "", [] 같은 것들을 반환할 때와 동일하게 판단되므로 실수하기 쉬워짐. None을 반환한다면 다음 형태로 처리하는 것이 좋음. 명시적으로 None 체크하기 (is None) → 타입체커랑 사용하기 좋음. (연산 성공, 결과)를 튜플 형식으로 반환하기 → 사용자가 무시하기 쉬움. 명시적으로 예외를 던지고 Try / except / else를 사용하기 사용자가 문서를 읽지 않으면 런타임 에러에 대응하지 못할 수 있음. 그러나 빠른 실패라는 관점에서 좀 더 단단한 어플리케이션이 될 수도 있음. Item 20. None을 반환하기보다는 예외를 발생시켜라 if None: print('false' if 0: print('false') if []: print('false'..
요약 def 문에서 *args를 사용하면 함수가 가변 위치 기반 인자를 받을 수 있다. * 연산자를 사용하면 가변 인자를 받는 함수에게 시퀀스(리스트) 내의 원소를 전달할 수 있음. (언패킹 한 후 튜플로 만들어 전달함.) 제네레이터에 * 연산자를 사용해 가변인수에 넘기면, 메모리를 소진하고 중단할 수 있음. 가변인수 메서드에 위치 기반 인자를 추가하면 찾기 어려운 버그가 발생할 수 있음. 인자를 추가해야 하는 경우 키워드 기반 인자를 추가하자. 가변 인수 사용의 장점. def log(message, values): if not values: print(message) else: value_str = ', '.join(str(x) for x in values) print(f'{message}: {valu..
들어가기 전 이 글은 이펙티브 파이썬 아이템 19를 공부하며 작성한 글입니다. 요약 반환값이 많아지면 가독성이 떨어지며, 실수할 여지가 많아진다. 언패킹을 이용하거나, 언패킹 해야할 값이 너무 많아지면 데이터 클래스등으로 묶어서 반환해라. Item 19. 함수가 여러 값을 반환하는 경우 절대로 네 값 이상을 언패킹하지 마라. # 슬라이싱보다는 언패킹을 이용하라. lengths = [1, 2, 3, 4] def get_avg_ratio(numbers: list[int]) -> list[num]: average = sum(numbers) / len(numbers) scaled = [x / average for x in numbers] scaled.sort(reverse=True) return scaled #..
# 빈 Map 생성 A = #{}. # Map에 데이터 넣기 B = A#{"d" => "DDD"}. # Map에서 데이터 가져오기 Hello = maps:get("MyKey", B). lists:foldl(함수, Acc, 리스트) lists:reverse()도 있음. lists ++ lists 하면 두개 Concat함. 반드시 True가 존재해야함. if 평가식 -> 수행할 값; true -> 수행할 값 end Acc = [1,2,3] Carry = 4 B = [Carry | Acc]; -> [4,1,2,3] List를 합칠 때, 뒷쪽에 있는 List는 풀어서 해준다. erlang의 List는 링크드 리스트다. 따라서 한번에 다 도는게 맞는 거 같음. Define 사용하기 # INF를 9999로 사용 -..