본문 바로가기
Programming/Python

[Python] 인수를 여러개 받기 (위치/키워드/언패킹)

by 느리게 걷는 즐거움 2022. 12. 10.
반응형

리스트 언패킹

함수에 전달하는 파라메터를 여러개 전달 시 리스트 형태로 전달하는 방식 전달된 리스트의 요소가 '*'을 사용하여 함수에 전달할 때 나누어져 각각의 파라메터에 순서대로 전달된다.

def foo(a:int, b:int, c:int) -> int:
  print(f"{a} + {b} + {c} = {a+b+c}")

foo(*[1,2,3])
params = [3,3,3]
foo(*params)

--------------------------------
1 + 2 + 3 = 6
3 + 3 + 3 = 9

 

 

가변인수 만들기

함수에 전달하는 파라메터의 갯수가 정해지지 않는 경우 가변인수를 사용하여 다양한 파라메터 갯수를 전달할 수 있다.

전달된 처음 1,2,3과 리스트 언패킹으로 전달된 4,5가 *args 가변인자로 전달외어 모두 출력되는 것을 확인할 수 있다. 가변인수에도 리스트 언페킹으로 파라메터를 전달할 수 있다. 

두번째 함수는고정인자와 가변인자를 같이 사용하는 함수이다.  고정변수와 가변인수를 같이 사용하는 경우 항상 고정변수가 가변인수보다 먼저 사용되어야 한다. 출력은 고정인자로 전달된 "I"가 출력된 후 가변인자로 전달된 나머지 문자가 순서되로 출력되는 것을 확인할 수 있다.

# 가변인수 만들기
def many_parameters(*args):
  for idx, arg in enumerate(args):
    print(f"{idx}th argument : {arg}")

print("")
many_parameters(1,2,3,*[4,5])



# 고정변수와 가변인수 같이 사용하기
# 항상 고정변수가 가변인수보다 먼저 나와야 한다.
def param_with_params(a, *args):
  print(f"{a}", end = " ")
  for idx, arg in enumerate(args):
      print(f"{arg}", end = " ")

print("")
param_with_params('I', *['am','a','boy'])

---------------
0th argument : 1
1th argument : 2
2th argument : 3
3th argument : 4
4th argument : 5

I am a boy
 

위치 인수

함수로 전달되는 인자는 함수에 정의된 인자의 순서에 맞춰 전달된다. 따라서 함수에 정의된 인자와 순서가 다르면 잘못된 정보가 전달될 수 있다.

위치인자를 사용하는 경우 함수 호출 시 인자의 이름과 전달하는 값을 "="으로 연결하여 전달하여 전달하는 인자의 순서가 다른 경우에도 정보가 원하는 순서로 전달된다.

def book_info(name, pages):
  print(f"book {name} is {pages} pages")

book_info(pages=200, name="python")

--- 
book python is 200 pages
반응형