- [BW 20] None을 반환하기보다는 예외를 발생시켜라31514False와 동등한 반환 값을 잘못 해석하는 경우는 None이 특별한 의미를 가지는 파이썬 코드에서 흔히 저지르는 실수다.아래 코드처럼 result는 0이 되어야 하는데, 잘못된 입력이 출력되는 상황이 발생한다.x, y = 0, 5def careful_divide(a, b): try: return a / b except ZeroDivisionError: return None result = careful_divide(x, y)if not result: print('잘못된 입력')이를 해결하기 위해 두 가지 방법을 생각해볼 수 있다.반환 값을 튜플로 분리한다.첫 번째 요소에 성공 여부를 표시한다.두 번째 요소에 실제 값을 표시한다.Exception을 호..
- 2024-10-23 11:02:11
- [BW 19] 함수가 여러 값을 반환하는 경우 절대로 네 값 이상을 언패킹하지 말라31514lengths = [63, 73, 72, 60, 67, 66, 71, 61, 72, 70]def get_stats(numbers): mini = min(numbers) maxi = max(numbers) count = len(numbers) average = sum(numbers) / count sorted_numbers = sorted(numbers) middle = count // 2 if count % 2 == 0: lower = sorted_numbers[middle - 1] upper = sorted_numbers[middle] median = (lower + upper) / 2 else: median ..
- 2024-10-22 16:12:39
- [BW 18] __missing__을 사용해 키에 따라 다른 디폴트 값을 생성하는 방법31514만약 defaultdict 의 기본 값을 어떤 인자가 필요한 함수로 지정하면 다음과 같이 오류가 발생한다.from collections import defaultdictpath = "/"def open_file(file_path): try: return open(file_path, 'a+b') except OSError: print(f"경로를 알 수 없습니다: {file_path}") raisefiles = defaultdict(open_file)handle = files[path]handle.seek(0)file_data = handle.read()>>>TypeError: open_file() missing 1 required positional argu..
- 2024-10-22 16:12:08
- [BW 14] 복잡한 기준을 사용해 정렬할 때는 key 파라미터를 사용하라31514다음과 같은 클래스가 있다고 가정해보고 tools 를 정의했다.class Tool: def __init__(self, name, weight): self.name = name self.weight = weight def __repr__(self): return f'Tool({self.name!r}, {self.weight})'tools = [ Tool('수준계', 3.5), Tool('해머', 1.25), Tool('스크류드라이버', 0.25), Tool('끌', 0.25),]tools 에 담긴 여러 인스턴스를 sort()를 통해 정렬할 수 있을까?비교 연산자를 지원하지 않는 오류가 발생한다.Traceback (most rece..
- 2024-10-22 16:11:40
- [BW 13] 슬라이싱보다는 나머지를 모두 잡아내는 언패킹을 사용하라31514아래와 같은 코드는 ages의 요소가 추가되거나 삭제되었지만, 다른 줄에서 깜빡하고 수정하지 않으면 의도하지 않은 결과를 초래할 수 있다.ages = [20, 19, 18, 17, 16, 15, 14, 13]oldest, second_oldest, others = ages[0], ages[1], ages[2:]print(oldest, second_oldest, others)>>>20 19 [18, 17, 16, 15, 14, 13]따라서 별표 식을 사용해 모든 값을 담는 언패킹을 사용하면 좋다.ages = [20, 19, 18, 17, 16, 15, 14, 13]oldest, second_oldest, *others = agesprint(oldest, second_oldest, others)>>>20 1..
- 2024-10-22 16:11:04
- [BW 12] 스트라이드와 슬라이스를 한 식에 함께 사용하지 말라31514스트라이드는 일정한 간격을 두고 슬라이싱을 할 수 있는 특별한 구문이다.arr = ['red', 'orange', 'yellow', 'green', 'blue']odds = arr[::2]evens = arr[1::2]print(odds)print(evens)>>>['red', 'yellow', 'blue']['orange', 'green']하지만 스트라이드는 종종 예기치 못한 동작이 일어나서 버그를 일으킬 수 있다. 유니코드 문자열을 UTF-8로 인코딩하고 스트라이드를 사용해 역으로 뒤집은 뒤, 다시 디코딩을 해보면 어떨까?word = '한글은 위대해'x = word.encode('utf-8')y = x[::-1]z = y.decode('utf-8')print(x)print(y)print(z)>>>Un..
- 2024-10-22 16:10:32
- [BW 11] 시퀀스를 슬라이싱하는 방법을 익혀라31514리스트를 슬라이싱한 결과는 새로운 리스트이다. 대입에 슬라이스를 사용하면 원본 리스트에서 지정한 범위에 들어 있는 원소를 변경한다.그리고 대입 슬라이스와 대입되는 리스트의 길이가 같을 필요가 없다.arr = [1, 2, 3, 4, 5, 6, 7]print(arr)# [2:5]는 총 3개의 원소를 나타내지만, [8, 9]만 대입해도 상관없다.arr[2:5] = [8, 9]print(arr)>>>[1, 2, 3, 4, 5, 6, 7][1, 2, 8, 9, 6, 7]
- 2024-10-22 16:09:51
- [BW 10] 대입식을 사용해 반복을 피하라31514대입식은 := 를 사용하고 왈러스 연산자라고도 부른다.만약 기존의 코드가 아래와 같을 때, count 변수는 if 문의 첫 번째 블록 안에서만 사용된다.count = fresh_fruit.get('레몬', 0)if count: print("레몬 있어요! " + str(count) + "개")else: print("없어요!")이를 다음과 같이 왈러스 연산자를 사용해서 수정할 수 있다.if count := fresh_fruit.get('레몬', 0): print("레몬 있어요! " + str(count) + "개")else: print("없어요!")만약 다음과 같은 while 문이 있다고 해도 왈러스 연산자를 사용하면 불필요한 변수 선언을 줄이고 가독성 있게 수정할 수 있다.# 수정 전..
- 2024-10-22 16:08:59
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)