- [BW 26] functools.wrap을 사용해 함수 데코레이터를 정의하라31514데코레이터는 자신이 감싸고 있는 함수가 호출되기 전과 후에 코드를 추가로 실행해준다.즉, 데코레이터가 자신이 감싸고 있는 함수의 입력 인자, 반환 값, 함수에서 발생한 오류에 접근할 수 있다는 뜻이다. 예를 들어 함수가 호출될 때마다 인자 값과 반환 값을 출력하는 함수가 있다고 하자.def trace(func): def wrapper(*args, **kwargs): result = func(*args, **kwargs) print(f'{func.__name__}({args!r}, {kwargs!r}' f'-> {result!r}') return result return wrapper 그리고 피보나치 함수를 정의하고 trace 함수의 ..
- 2024-10-25 11:47:29
- [BW 25] 위치로만 인자를 지정하게 하거나 키워드로만 인자를 지정하게 해서 함수 호출을 명확하게 만들라31514키워드를 사용해 인자를 넘기는 기능은 파이썬 함수의 강력한 기능이다.예를 들어 때로는 ZeroDivisionError 예외를 무시하고 무한대를 반환하고, 어떨 때는 Overflow 예외를 무시하고 0을 반환한다고 해보자.def safe_division(number, divisor, ignore_overflow, ignore_zero_division): try: return number / divisor except OverflowError: if ignore_overflow: return 0 else: raise except ZeroDivisionError: if ignore_zero_division..
- 2024-10-24 15:09:02
- [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
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)