함수를 호출할때 위치에 따라 인자를 넘길 수 있다
def remainder(number, divisor):
return number % divisor
assert remainder(20, 7) == 6
remainder(20, 7)
6
remainder(20, divisor=7)
6
remainder(number=20, divisor=7)
6
remainder(divisor=7, number=20)
6
remainder(number=20, 7)
File "<ipython-input-7-9265fd4030d2>", line 1 remainder(number=20, 7) ^ SyntaxError: positional argument follows keyword argument
remainder(20, number=7)
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-8-f2d03bd9e009> in <module> ----> 1 remainder(20, number=7) TypeError: remainder() got multiple values for argument 'number'
딕셔너리의 내용물을 사용해 remainder와 같은 함수를 호출하고 싶다면 **연산자를 사용할 수 있다.
my_kwargs = {
'number': 20,
'divisor': 7
}
assert remainder(**my_kwargs) == 6
** 연산자를 위치 인자나 키워드 인자와 섞어서 함수를 호출할 수 있다. 다만 중복되는 인자가 없어야 한다.
my_kwargs = {
'divisor': 7,
}
assert remainder(number=20, **my_kwargs) == 6
** 연산자를 여러 번 사용할 수도 있다. 다만 여러 딕셔너리에 겹치는 키가 없어야 한다.
my_kwargs = {
'number': 20,
}
other_kwargs = {
'divisor': 7,
}
assert remainder(**my_kwagrs, **other_kwargs) == 6
아무 키워드 인자나 받는 함수를 만들고 싶다면, 모든 키워드 인자를 dict에 모아주는 **kwargs 라는 파라미터를 사용한다.
def print_parameters(**kwargs):
for key, value in kwargs.items():
print(f'{key} = {value}')
print_parameters(alpha=1.5, beta=9, 감마=4)
alpha = 1.5 beta = 9 감마 = 4
키워드 인자가 제공하는 세가지 이점
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(f'{flow:.3} kg/s')
0.167 kg/s
def flow_rate(weight_Diff, time_diff, period):
return (weight_diff / time_diff) * period
flow_per_second = flow_rate(weight_diff, time_diff, 1)
flow_per_second
0.16666666666666666
def flow_rate(weight_Diff, time_diff, period=1):
return (weight_diff / time_diff) * period
flow_per_second = flow_rate(weight_diff, time_diff)
flow_per_hour = flow_rate(weight_diff, time_diff, period=3600)
def flow_rate(weight_Diff, time_diff, period=1, units_per_kg=1):
return ((weight_diff / units_per_kg) / time_diff) * period
flow_per_hour = flow_rate(weight_diff, time_diff, period=3600, units_per_kg=2.2)
flow_per_hour
272.72727272727275
선택적 인자를 위치인자로 지정하면 혼동을 야기할 수 있다.
따라서 항상 키워드 인자를 사용하고 위치 인자를 절대 사용하지 않는 것