가변적인 위치 인자(positional argument)는 가변 인자(varages) 똔느 스타 인자(star args)라고 한다.
c++에서 사용하는 형태랑 많이 비슷하다 보면 된다.
단, 파이썬에서 사용 시에는 패킹된 상태로 전달된다.
def log(message, *values):
if not values:
print(message)
else:
values_str = ' '.join(str(x) for x in values)
print(f"{message}: {values_str}")
log('안녕하세요') # 안녕하세요
log('alirz', '안녕', '하세요') # alirz: 안녕
파이썬 함수에서는 모든 인자를 키워드를 사용해 넘길 수 있다. (keyword argument)
즉, 함수 호출 시 괄호 내에서 파라미터 이름을 대입 연산해 사용하면 된다.
def remainder(number, divisor):
return number & divisor
remainder(number=10, 2) #에러
remainder(10, divisor=2) #성공
파이썬에서 함수 사용 시, **연산자
는 딕셔너리에 들어있는 값을 함수에 전달하되, 각 값에 대응하는 키를 키워드로 사용하도록 한다.
kwargs = {
'number': 20,
'divisor': 10
}
remainder(**kwargs)
반대로 함수 정의시에도 **연산자
를 사용할 수 있다.
def print_parameters(**kwargs):
for key, val in kwargs.items():
print(f'{key} & {val}')
print_parameters(jihun=10, someone=5, another=7)
# jihun & 10
# someone & 5
# another & 7
키워드 인자를 사용하면 디폴트 값을 지정할 수 있으며, 코드 가독성을 높여줄 수 있다.
def foo(a, /, b, *, c):
print(a, b, c)
/와 *의 의미는 아래와 같다
/
- '/' 앞쪽(왼쪽)에는 positional argument만 올 수 있다.*
- *'의 뒷쪽(오른쪽)에는 keyword argument만 올 수있다./
와 *
사이에는 positional argument와 keyword argument의 구분 없이 아무 형태나 올 수 있다.foo(1, 2, 3) # error. 세번째 인자는 keyword argument가 와야 한다.
foo(a=1, b=2, c=3) # error. 첫번째 인자는 positioal argument가 와야 한다.
foo(1, 2, c=3) # ok
foo(1, b=2, c=3) # ok
foo(1, b=2, 3) # error. 세번째 인자는 keyword argument가 와야 한다.
출처: https://kukuta.tistory.com/316 [HardCore in Programming:티스토리]