함수 호출 명확

매일 공부(ML)·2022년 6월 16일
0

이어드림

목록 보기
77/146

위치로만 인자를 지정하게 하거나 키워드로만 인자를 지정하게 해서 함수 호출을 명확하게 만들라

키워드인자 사용 전

#숫자를 나눌 때, 특별한 경우
#ZeroDivisionError: 예외 무시 후 무한대 반환
#OverflowError: 예외를 무시 후 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:
            return float('inf')
        else:
            raise

키워드인자 사용 후

  • 선택사항이므로 예전 방식으로도 호출이 가능
"""
버그 추적이 쉬워지고 코드의 가독성 향상
모든 예외를 다시 던진다

키워드 인자를 사용하면 무시할 예외를 정하는 플래그 설정
"""
def safe_division_b(number, divisor,
                    ignore_overflow =False,
                    ignore_zero_divison=False)


복잡한 함수 속 키워드 인자 사용

  • 호출자가 키워드만 사용하는 인자를 통해 의도 명목화

  • 키워드만 사용하는 인자는 반드시 사용지정

  • 절대위치를 기반으로 지정 안됨

"""
ndigits는 위치나 키워드를 사용해서 전달할 수 있는 선택적 파라미터

* : 키워드로만 지정해야하는 인자 목록에 위치
/: 위치로만 지정해야하는 인자 앞에 위치
/와 * 사이에 파라미터 키워드를 사용해서 전달 혹은 위치 기반으로 전달

"""
def safe_division_e(numerator, denominator, /,
                    ndigits=10,*,
                    ignore_overflow =False,
                    ignore_zero_divison=False):
    
    try:
        fraction = numerator / denominator
        return round(fraction, ndigits)
    except OverflowError:
        if ignore_overflow:
            return 0
        else:
            raise
    except ZeroDivisionError:
        if ignore_zero_division:
            return float('inf')
        else:
            raise

profile
성장을 도울 아카이빙 블로그

0개의 댓글