코딩의기술#25 키워드인자의 이점

김주현·2021년 7월 2일
0

키워드 인자란?

def profile(name, age, main_lang): # 키워드 인자 : name, age, main_lang
    print(name, age, main_lang)
profile("이창호님","예상나이",33) #일반인자
profile(main_lang="에이펠", age='가즈아', name="다함께") 

출력:(이창호님 예상나이 33
    다함께 가즈아 에이펠)

@@@함수에는 순서대로 전달, 호출한 내용은 순서가 뒤죽박죽으로 호출했지만 결과는 순서대로 나옴
주의!!
함수를 호출할 때 일반적인 전달값과 키워드 인자를 함께 사용하는 경우에는 반드시
일반 전달값들을 순서대로 먼저 적고 나서 키워드 인자들을 적어야 함.
키워드를 사용해 인자를 넘기는 기능은 파이썬 함수의 강력한 기능

예시1)
def safe_division(number, divisor,
                  ignore_overflow,
                  ignore_zero_division):
    try:
        return number / divisor
    except OverflowError:  #예외가 발생했을때 처리하는 코드
        if ignore_overflow:  #True
            return 0
        else:
            raise
    except ZeroDivisionError:
        if ignore_zero_division: #True
            return float('inf')
        else:
            raise
            
result = safe_division(1.0,10*500,True,False)
result = safe_division(1.0,0,False,True) ## 변수가 많으므로 어떤 예외를 무시할지 위치를 혼동하기 쉽다!
print(int(result))

위치를 혼동하는 것을 막기위해 키워드 두두등장!

def safe_division_b(number, divisor,
                    ignore_overflow=False,       # 변경
                    ignore_zero_division=False): # 변경
                    .
                    .
result = safe_division_b(1.0, 10**500, ignore_overflow=True)
print(result)
result = safe_division_b(1.0, 0, ignore_zero_division=True)
print(result)
# 이와 같이 복잡한 함수의 경우 호출자가 키워드만 사용하는 인자를 통해 의도를 명확히 밝히는 것이 중요함 
def safe_division_c(number, divisor, *,         # 변경 *기호는 위치 인자의 마지막과 키워드만 사용하는 인자의 시작을 구분해준다
                    ignore_overflow=False,
                    ignore_zero_division=False):
result=safe_division_c(1.0,10**500,True,False) # 키워드 인자를 써야 하는데, (True,False)위치 인자를 사용하면 작동되지 않는다.
print(result)

"*"별표식전에는 위치인자 후는 키워드인자
"/" 위치로만 지정하는 인자

def safe_division_d(numerator, denominator, /, *, # 변경  /:위치인자
                    ignore_overflow=False,
                    ignore_zero_division=False):
                    '
assert safe_division_d(2,5)==0.4                   '
safe_divison_d(numerator=2, denominator=5) #오류발생

#오류발생!!
위치로만 지정하는 인자를 키워드를 사용해 지정하면 예외가 발생한다.

위에 나와있는 것을 포함해서 해결책 제시

def safe_division_e(numerator, denominator, /,
                    ndigits=10, *,                 # 변경 
                    ignore_overflow=False,
                    ignore_zero_division=False):
                    '
                    '
  	
result = safe_division_e(22, 7) 
print(result)

result = safe_division_e(22, 7, 5) 
print(result)

result = safe_division_e(22, 7, ndigits=2)  #소수점 자리지정
print(result)

출력:3.1428571429
    3.14286
	3.14

@@@ / 와 * 기호 사이에 있는 모든 파라미터는 위치를 사용해 전달할 수 도 있고 이름을 키워드로 사용해 전달이 가능하다.
그러므로 두 인자 전달 방식을 통해 가독성을 높이고 잡음도 줄일 수 있음

profile
잼민이개발자

0개의 댓글