Python/함수와 모듈

Python 함수의 이름인수, 가변 인수 처리

Yonggyu 2023. 9. 20. 15:37
반응형

 

이름인수(named argument)

함수를 호출하면서 함수명(인수=초깃값) 처럼 인수에 초깃값을 주고 매개변수의 이름과 매핑시켜 값을 전달 할 수 있다.
이 방법을 사용하면 함수의 매개변수에 인수를 전달할 때 매핑 순서를 지키지않아도 가능하다.

 

def func(a,b):
    print('a :',a)
    print('b :', b)
func(a=1,b=2)
func(b=1,a=2)
""" 결과값
a : 1
b : 2
a : 2
b : 1
"""

 

 

가변인수처리

함수를 호출하다 보면 매개변수로 전달할 값이 하나일때도 있고 여러개 일때도 있다. 이때마다 함수를 따로 작성해야한다면 너무 번잡한 일이 된다.
이 문제를 해결하는 방법으론 *매개변수(위치 가변)가 있다. 매개변수 이름에 *를 붙여주면 입력 값을 전부 투플로 묶어 처리하게된다.

 

def sum_numbers(*numbers):
    print(type(numbers))
    sum =0
    for number in numbers:
        sum += number
    return sum
    
print(sum_numbers(1,2,3,4,5))


""" 결과값
<class 'tuple'>
15

"""

 

 

그렇다면 딕셔너리 자료형은 어떻게 매핑할까?
이 경우는 **를 매개변수 앞에 붙이면된다.

 

def func(a,b,*v1,**v2):
    print(a,b)
    print(v1)
    print(v2)
    
func(1,2)
func(1,2,3,4,5)
func(1,2,3,4,5,m=6,n=7)

"""결과값
1 2     --> func(1,2)
()
{}
1 2     --> func(1,2,3,4,5)
(3, 4, 5)
{}
1 2     --> func(1,2,3,4,5,m=6,n=7)
(3, 4, 5)
{'m': 6, 'n': 7}
"""

위의 코드처럼 입력받은 인수들을 순차적으로 매개변수로 처리하고, 딕셔너리는 **로 처리가능하다는 것을 알 수 있다.

 

 

 

728x90
반응형