- [BW 25] 위치로만 인자를 지정하게 하거나 키워드로만 인자를 지정하게 해서 함수 호출을 명확하게 만들라2024년 10월 24일
- 31514
- 작성자
- 2024.10.24.:09
키워드를 사용해 인자를 넘기는 기능은 파이썬 함수의 강력한 기능이다.
예를 들어 때로는 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: return float('inf') else: raise
위 함수를 아래와 같이 사용하면, 어떤 예외를 무시할지 결정하는 두 변수의 위치를 혼동하기 쉽다.
safe_division(1.0, 10**500, True, False)
따라서 이럴 때 키워드 인자를 사용한다.
def safe_division(number, divisor, ignore_overflow=False, ignore_zero_division=False): ... safe_division(1.0, 0, ignore_zero_division=True)
하지만 키워드 인자를 사용하는 것이 선택적인 사항이므로 복잡한 함수의 경우 * 기호로 강제할 수 있다.
def safe_division(number, divisor, *, ignore_overflow=False, ignore_zero_division=False): ... safe_division(1.0, 10*500, True, False) >>> TypeError: safe_division() takes 2 positional arguments but 4 were given
safe_division(1.0, 0, ignore_zero_division=True) >>> inf
이 경우에도 문제가 있다.
다음과 같이 두 필수 인자를 키워드 인자로 호출할 경우를 생각해보자.
safe_division(number=2, divisor=5)
만약 함수의 인자 이름이 변경되면 어떤 일이 발생할까?
def safe_division(numerator, denominator, *, ignore_overflow=False, ignore_zero_division=False): ...
safe_division(number=1.0, divisor=0, ignore_zero_division=True) >>> TypeError: safe_division() got an unexpected keyword argument 'number'
이를 위해서 위치로만 지정하는 인자를 사용할 수 있다.
위치로만 지정하는 인자는 반드시 위치만 사용해 인자를 지정해야하고 키워드 인자를 사용할 수 없다.
def safe_division(numerator, denominator, /, *, ignore_overflow=False, ignore_zero_division=False): ... safe_division(2, 5) >>> 0.4
단, /와 * 사이에 있는 인자는 위치를 지정해도 되고, 키워드 인자를 사용해도 된다.
def safe_division(num, div, /, ndigits=10, *, ignore_overflow=False, ignore_zero_division=False): ... safe_division(22, 7, 5) safe_division(22, 7, ndigits=5)
'Book > 파이썬 코딩의 기술' 카테고리의 다른 글
[BW 27] map과 filter 대신 컴프리헨션을 사용하라 (0) 2024.10.28 [BW 26] functools.wrap을 사용해 함수 데코레이터를 정의하라 (0) 2024.10.25 [BW 24] None과 독스트링을 사용해 동적인 디폴트 인자를 지정하라 (0) 2024.10.23 [BW 23] 키워드 인자로 선택적인 기능을 제공하라 (0) 2024.10.23 [BW 22] 변수 위치 인자를 사용해 시각적인 잡음을 줄여라 (1) 2024.10.23 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)