전체 글(35)
-
[파이썬에서 살아남는법 제 28장] 대입식을 사용해 컴프리헨션 안에서 반복작업을 피하라
※본 내용은 파이썬의 코딩 기술 (개정 2판)을 바탕으로 작성 했습니다. 컴프리헨션에서 같은 계산을 여러 위치에서 공유하는 경우가 흔하다. 아래와 같은 예시를 보자. stock = { 'nails': 125, 'screws': 35, 'wingnuts': 8, 'washers': 24, } order = ['screws', 'wingnuts', 'clips'] def get_batches(count, size): return count // size result = {} for name in order: count = stock.get(name, 0) batches = get_batches(count, 8) if batches: result[name] = batches print(result) >>> {..
2023.03.29 -
[파이썬에서 살아남는법 제 27장] 컴프리헨션 내부에 제어 하위식을 세개 이상 사용하지 말라
※본 내용은 파이썬의 코딩 기술 (개정 2판)을 바탕으로 작성 했습니다. 컴프리헨션은 기본적인 사용법 외에도 루프를 여러 수준으로 내포하도록 허용한다. 예를들어 리스트 안에 리스트가 들어있는 형태로 정의한 행렬을 모든 원소가 들어 있는 평평한 단일 리스트로 단순화 하고싶다고 하자 matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] flat = [x for row in matrix for x in row] print(flat) >>> [1, 2, 3, 4, 5, 6, 7, 8, 9] 이러한 예제는 간단하고 읽기 쉽다. 다른 예제로는 행렬 리스트를 복제하는경우를 예로 들수 있다. squared = [[x**2 for x in row] for row in matrix] print(sq..
2023.03.28 -
[파이썬에서 살아남는법 제 26장] map 과 filter 대신 컴프리헨션을 사용하라
※본 내용은 파이썬의 코딩 기술 (개정 2판)을 바탕으로 작성 했습니다. 파이썬은 다른 시퀀스나 이터러블 에서 새 리스트를 만들어내는 간결한 구문을 제공한다. 이런식을 리스트 컴프리헨션 이라고 한다. 예를 들어 아래 예시를 보자. a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] squares = [] for x in a: squares.append(x**2) print(squares) >>> [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 리슽트 컴프리헨션을 사용해 루프로 처리할 대상인 입력 시퀀스의 원소에 적용할 변환식을 지정함으로써 같은 결과를 얻을수 있다. squares = [x**2 for x in a] # List comprehension print(squa..
2023.03.27 -
[파이썬에서 살아남는법 제 25장] functools.wrap 을 사용해 함수 데코레이터를 정의하라
※본 내용은 파이썬의 코딩 기술 (개정 2판)을 바탕으로 작성 했습니다. 파이썬은 함수에 적용할수 있는 데코레이터 (decorator) 를 정의하는 특별한 구문을 제공한다. 데코레이터는 자신이 감싸고 있는 함수가 호출되기 전과 후에 코드를 추가로 실행해준다. 이는 데코레이터가 자신이 감싸고 있는 함수의 입력 인자, 반환값, 함수에서 발생한 오류에 접근할수 있다는 뜻이다. 예를 들어 함수가 호출될때 마다 인자값고 반환 값을 출력 하고 싶다고 하자, def trace(func): def wrapper(*args, **kwargs): result = func(*args, **kwargs) print(f'{func.__name__}({args!r}, {kwargs!r}) ' f'-> {result!r}') re..
2023.03.23 -
[파이썬에서 살아남는법 제 24장] 위치로만 인자를 지정하게 하거나 키워드로만 인자를 지어하게 해서 함수 호출을 명확하게 만들라
※본 내용은 파이썬의 코딩 기술 (개정 2판)을 바탕으로 작성 했습니다. 키워드를 사용해 인자를 넘기는 기능은 파이썬에 있는데 아래와 같은 예시로 나타낸다. 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: return float('inf') else: raise result = safe_division(1.0, 10**500, True, False) print(result..
2023.03.22 -
[파이썬에서 살아남는법 제 23장] None 과 독스트링을 사용해 동적인 디폴트 인자를 지정하라
※본 내용은 파이썬의 코딩 기술 (개정 2판)을 바탕으로 작성 했습니다. 종종 키워드 인자의 값으로 정적으로 정해지지 않는 타입의 값을 써야할때가 있다. 예를 들어 아래와 같이 로그메시지와 시간을 출력하는것에 해당한다. from time import sleep from datetime import datetime def log(message, when=datetime.now()): print(f'{when}: {message}') log('하잉') sleep(0.1) log('하아아잉') >>> 2019-07-06 14:06:15.120124: 하잉 2019-07-06 14:06:15.120124: 하아아잉 함수가 호출될 때마다 디폴트 인자가 재계산 된다고 가정하면 다음과 같은 접근 방법을 사용할수 있다..
2023.03.20