Python

Python - 함수 인자의 개수를 알 수 없을 때

5Re 2020. 8. 11. 13:59

함수, 메서드를 작성할 때 대부분의 경우 매개변수의 개수를 명확히 지정해준다.

하지만 때로는 내가 작성한 함수의 인자로 몇 개가 입력될지 모를 때가 있다.

그럴 때는 매개변수에 *를 붙이면 여러 개의 입력값(인자)을 하나의 튜플로 받을 수 있다.

이러한 함수를 가변인자함수라고한다.

def print_animal(*args):	
    for name in args:				#for문을 이용해 튜플의 모든 내용 출력
        print(name,end=' ');

    print();

print_animal('dog','cat','lion');	#튜플('dog','cat','lion')를 인자로 전달
print_animal('tiger','cat');		#튜플('tiger','cat')를 인자로 전달

>>dog cat lion 
>>tiger cat 

(*매개변수)를 마지막에만 작성해주면 그 앞에 다른 매개변수를 포함해도 함수는 정상적으로 작동된다.

def print_animal(num,*args):
    print(num,end=' ');
    for name in args:
        print(name,end=' ');

    print();

print_animal(3,'dog','cat','lion');
print_animal(2,'tiger','cat');

>>3 dog cat lion 
>>2 tiger cat 

위의 예제에서는 함수의 인자를 위치 인자(Positional arguments)로 전달했지만 아래와 같이 키워드 인자(keyword arguments)를 전달받는 가변인자함수도 생성이 가능하다.

def print_animal(**kwargs):		# 매개변수의 이름앞에(**)를 붙여준다.
   print(kwargs)			#딕셔너리 형태로 전달받는다.
   for x in kwargs:
       print(kwargs[x])

print_animal(a='cat',b='dog',c='lion')

>>{'a': 'cat', 'b': 'dog', 'c': 'lion'}	#딕셔너리 형태로 전달받는다.
>>cat
>>dog
>>lion

위의 두 예시를 함께 사용할 수도 있다.

단, 위치 인자가 키워드 인자보다 항상 앞에 위치해야 된다.

def print_animal(*args,**kwargs):
    print(args)
    print(kwargs)
  

print_animal('tiger','rabbit',a='cat',b='dog',c='lion')

>>('tiger', 'rabbit')
>>{'a': 'cat', 'b': 'dog', 'c': 'lion'}