- [BW 24] None과 독스트링을 사용해 동적인 디폴트 인자를 지정하라31514종종 키워드 인자의 값으로 동적인 값을 넘겨주고 싶을 때가 있다. 예를 들어 로그 메시지와 시간을 함께 출력하고 싶다고 하자. 하지만 datetime.now()는 함수가 정의되는 시점에 단 한 번만 호출되기 때문에 타임스탬프가 항상 같다.from time import sleepfrom datetime import datetimedef log(message, when=datetime.now()): print(f'{when}: {message}')log('안녕!')sleep(1)log('다시 안녕!')>>>2024-10-23 12:48:30.559487: 안녕!2024-10-23 12:48:30.559487: 다시 안녕! 이런 경우 파이썬의 일반적인 관례는 디폴트 값을 None을 지정하고, 실제 동작을..
- 2024-10-23 13:01:48
- [BW 23] 키워드 인자로 선택적인 기능을 제공하라31514파이썬도 함수를 호출할 때 위치에 따라 인자를 넘길 수 있다.def remainder(number, divisor): return nuber % divisorremainder(20, 7) 키워드를 사용하면 순서는 관계없다.remainder(divisor=7, number=20) 딕셔너리에 들어 있는 값을 함수에 전달할 수 있다.my_kwargs = { 'number': 20, 'divisor': 7,}remainder(**my_kwargs) 아무 키워드 인자나 받는 함수를 만들고 싶다면, 모든 키워드 인자를 dict에 모아주는 **kwargs 파라미터를 사용한다.def print_parameters(**kwargs): for key, value in kwargs.items(): ..
- 2024-10-23 12:44:54
- [BW 22] 변수 위치 인자를 사용해 시각적인 잡음을 줄여라31514스타 인자를 사용하면 함수 호출이 더 깔끔해지고 시각화 잡음도 줄어든다.def log(message, *values): if not values: print(message) else: values_str = ', '.join(str(x) for x in values) print(f'{message}: {values_str}')log('내 숫자는', 1, 2)log('안녕')>>>내 숫자는: 1, 2안녕하지만 두 가지 문제가 있다.스타 인자가 함수에 전달되기 전에 항상 튜플로 변환되어 메모리를 소비한다.따라서 스타 인자로 들어오는 데이터가 충분히 작아야 한다.함수에 새로운 인자를 추가하면 해당 함수를 호출하는 모든 코드를 변경해야 한다.
- 2024-10-23 12:43:46
- [BW 21] 변수 영역과 클로저의 상호작용 방식을 이해하라31514다음 코드는 특정 그룹에 존재하는 숫자를 먼저 정렬하고, 나머지 숫자를 정렬하는 함수다.def sort_priority(values, group): def helper(x): if x in group: return (0, x) return (1, x) values.sort(key=helper)numbers = [8, 3, 1, 2, 5, 4, 7, 6]group = {2, 3, 4, 7}sort_priority(numbers, group)print(numbers)>>>[2, 3, 4, 7, 1, 5, 6, 8]이 함수가 예상대로 작동하는 세 가지 이유가 존재한다.파이썬이 클로저를 지원한다.클로저란 자신이 정의된 영역 밖의 변수를 참조하는 함수를 말한..
- 2024-10-23 12:43:02
- [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
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)