[Python]Function Parameters(2)

variable length arguments

매개변수 이름 앞에 *을 붙이면 입력값을 전부 모아서 튜플로 만들어 주기 때문에 여러 개의 입력값을 받을 수 있다.

def example(num1, num2, *args)
    print(num1)
    print(num2)
    print(args)

example(1, 6, 3, 4, 5)

위와 같이 함수를 호출하면 num1, num2에는 각각 1과 6이 전달되고,
*args라는 Parameter는 3, 4, 5를 튜플 형태로 전달받는다.

위와 같은 코드를 실행하면 오류가 발생한다.
"정우성"은 name에 전달된다.
나머지 3개의 인수가 모두 *args에 전달되면 age에 할당되는 인수가 없다.
즉, 파이썬은 어디부터 어디까지가 *args에 전달되어야 하는 인수인지 파악할 수 없기 때문에 오류가 발생하는 것이다.

이 문제를 해결하려면 1)*args를 parameter의 마지막에 위치시키거나
20을 keword argument로 바꿔주면 된다.

1) def func_param_with_var_args(name, age, *args):
      print("name=",end=""), print(name)
      print("args=",end=""), print(args)
      print("age=",end=""), print(age)
      
   func_param_with_var_args("정우성", 20, "01012341234", "seoul")
   #age의 위치가 바뀌었으니 20의 위치도 옮겨준다.
    
2)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", age = 20)

위처럼 코드를 수정하면 다음과 같은 결과가 출력된다.

name=정우성
args=('01012341234', 'seoul')
age=20


위 코드 역시 오류가 발생한다.
parameter와 인수의 순서를 바꿔주고,
20에 keyword를 지정해주니 오류가 해결된다.

def mixed_params(name="아이유", *args, age, 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("정우성", "01012341234", "male" , age = 20, mobile="01012341234", address="seoul")

#출력
name=정우성
args=('01012341234', 'male')
age=20
kwargs={'mobile': '01012341234'}
address=seoul

좋은 웹페이지 즐겨찾기