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