[TIL] 위치 인수(positional arguments)와 가변 인수(variable length arguments)

Lee yeonseong·2020년 8월 20일
0
post-thumbnail

위치인수란 무엇인가 ?

함수를 호출할 떄 전달되는 값이 매개변수에 순서대로 전달되는 인수를 의미하며, 가장 자주 사용되는 방식이다.

가변인수란 무엇인가 ?

인수의 개수가 변할 수 있다느 의미이며, 가변인수를 전달받는 함수란 함수를 호출할 때, 인수의 개수를 다양하게 바꿔가며 사용할 수 있는 함수를 의미한다.

*arg를 사용을 사용하여 코드를 입력할땐 순서도 중요하다.

우선순위

  1. 위치 인수 (기본값 X)
  2. 위치 인수 (기본값 O)
  3. / (위치 인수들 어딘가에 존재)
  4. 위치 가변 인수 (*)
  5. 키워드 전용 인수 (기본값 유무 상관 없음)
  6. 키워드 전용 가변 인수 (**)

================================================

def func_param_with_var_args(name, *args, age):
    print("name=",end=""), print(name)
    print("args=",end=""), print(args)
    print("age=",end=""), print(age)


func_param_with_var_args("정우성", "01012341234", "seoul", 20)

위 코드를 호출하면 오류가 발생한다.

이떄 , name, age 매개변수가 온다음 뒤에 *args가 작성되어야 정상으로 코드가 출력된다.

호출할시 이런 오류가 발생한다.

TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'

이말은. age 값이 *arg 값이랑 바뀌어 정상 출력되지 않는것,

def func_param_with_var_args(name, *args, age):
    print("name=",end=""), print(name)
    print("args=",end=""), print(args)
    print("age=",end=""), print(age)


func_param_with_var_args("정우성", "01012341234", "seoul", 20)

이렇게, age 값을 *arg의 위치를 바꿔주면 호출할시 오류가 발생하지 않는다.

=====================================================================

가변인수 키워드

def func_param_with_kwargs(name, age, **kwargs, address=0):
    print("name=",end=""), print(name)
    print("age=",end=""), print(age)
    print("kwargs=",end=""), print(kwargs)
    print("address=",end=""), print(address)


func_param_with_kwargs("정우성", "20", mobile="01012341234", address="seoul")

이 코드도 마찬가지로 가변인수가 위치하고 마지막으로 address가 위치해 있기 때문에
오류가 발생한다.

위 코드를 호출할시 이런 오류가 발생한다.

SyntaxError: invalid syntax

이 역시 가변인수와 address의 위치를 변경해주면 오류가 발생하지 않는다. 이때 address는 default값을 가지므로 position인 name, age 보다 뒤에 써주어야 한다.

def func_param_with_kwargs(name, age,  address=0, **kwargs):
    print("name=",end=""), print(name)
    print("age=",end=""), print(age)
    print("kwargs=",end=""), print(kwargs)
    print("address=",end=""), print(address)
func_param_with_kwargs("정우성", "20", mobile="01012341234", address="seoul")

===============================================================

위치인수, 가변인수, 가변키워드

def mixed_params(name="아이유", *args, age, **kwargs, address):
    print("name=",end=""), print(name)
    print("args=",end=""), print(args)
    print("age=",end=""), print(age)
    print("kwargs=",end=""), print(kwargs)
    print("address=",end=""), print(address)
    
mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")

위 코드도 마찬가지로 같은 에러

SyntaxError: invalid syntax

라는 에러를 발생하게 된다.

position인 age를 맨앞으로 이동시켜주고 kwargs를 맨뒤로 옮겨준다.

def mixed_params(age, *args, name="아이유", address, **kwargs):
    print("name=",end=""), print(name)
    print("args=",end=""), print(args)
    print("age=",end=""), print(age)
    print("kwargs=",end=""), print(kwargs)
    print("address=",end=""), print(address)
    
mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")
name=아이유
args=('정우성', '01012341234', 'male')
age=20
kwargs={'mobile': '01012341234'}
address=seoul

라는 결과 값이 나오게 된다.

profile
더 나은 개발자가 되자.

0개의 댓글