위치 인수 / 키워드 인수
def remainder ( number , divisor ):
return number % divisor
remainder ( 20 , 7 ) # 위치 인수
remainder ( 20 , divisor = 7 ) # 위치 인수 + 키워드 인수
remainder ( number = 20 , divisor = 7 ) # 키워드 인수
remainder ( divisor = 7 , number = 20 ) # 키워드 인수
remainder ( number = 20 , 7 )
>>>
SytaxError : non - keyword arg after keyword arg
remainder ( 20 , number = 7 )
>>>
SytaxError : remainder () got multiple values for argument "number"
키워드 인수의 유연성의 이점
코드를 처음 보는 사람이 함수 호출을 더 명확하게 이해할 수 있다는 점
함수를 정의할 때 기본 값을 설정할 수 있다는 점
큰 통에 들어가는 액체의 유속을 계산하는 예제
def flow_rate ( weight_diff , time_diff ):
return weight_diff / time_diff
weight_diff = 0.5
time_diff = 3
flow = flow_rate ( weight_diff , time_diff )
print ( " %.3 f kg per second" % flow )
>>>
0.167 kg per second
보통은 초당 킬로그램 단위로 유속을 아는게 좋음
하지만 더 큰 시간 단위로 계산하는 게 좋을 떄도 있음
기간 환산 계수를 추가
def flow_rate ( weight_diff , time_diff , period ):
return ( weight_diff / time_diff ) * period
위 경우 항상 period
를 설정해줘야 한다는 단점이 있음
def flow_rate ( weight_diff , time_diff , period = 1 ):
return ( weight_diff / time_diff ) * period
period
가 선택적인 인수가 되었음
키워드 인수의 세 번째 이점은 기존 호출 코드와 호환성을 유지하면서도 함수의 파라미터를 확장할 수 있다는 점
킬로그램 단위는 물론 다른 무게 단위로도 유속을 계산하려고 앞의 예제를 확장
def flow_rate ( weight_diff , time_diff , period = 1 , units_per_kg = 1 ):
return (( weight_diff / units_per_kg ) / time_diff ) * period
pounds_per_hour = flow_rate ( weight_diff , time_diff , period = 3600 , units_per_kg = 2.2 )
이 방법의 유일한 문제점:
선택적인 키워드 인수(period
, units_per_kg
)를 여전히 위치 인수로도 넘길 수 있다는 점
def flow_rate ( weight_diff , time_diff , period = 1 , units_per_kg = 1 ):
return (( weight_diff / units_per_kg ) / time_diff ) * period
pounds_per_hour = flow_rate ( weight_diff , time_diff , 3600 , 2.2 )
위와 이 한다면 혼동을 일으킬 수 있음:
항상 키워드 이름으로 선택적인 인수를 지정하고 위치 인수로는 아예 넘기지 않아야 함
Comments