- [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
- [BW 9] for나 while 루프 뒤에 else 블록을 사용하지 말라31514💡 파이썬에서는 루프가 반복 수행하는 내부 블록 바로 다음에 else 블록을 추가할 수 있다. 루프가 모두 실행되어도 else 블록은 실행된다.for i in range(3): print('Loop', i)else: print('Else Block!') >>>Loop 0Loop 1Loop 2Else Block!루프가 한 번도 실행되지 않아도 else 블록은 실행된다.while False: print('No')else: print('While Else block!')>>>While Else block!루프 중 break문을 만나서 빠져나오면 else 블록은 실행되지 않는다.for i in range(3): print('Loop', i) if i == 1: brea..
- 2024-10-22 16:07:40
- [BW 8] 여러 이터레이터에 대해 나란히 루프를 수행하려면 zip을 사용하라31514문제 : 가장 긴 이름을 가진 동물을 찾아라.초기 세팅 코드longest_name = Nonemaxi = 0animals = ['outer', 'hamster', 'dog']counts = [len(n) for n in animals]배열 인덱스 i를 사용한 코드# 인덱스 i를 두 번 참조하여 시각적으로 잡음이 많다.for i in range(len(animals)): count = counts[i] if maxi >>hamsterzip을 사용한 코드for name, count in zip(animals, counts): if count > maxi: longest_name = name maxi = countprint(longest_name)>>>hamsterzi..
- 2024-10-22 16:06:45
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)