관리 메뉴

정리왕

파이썬 함수 4 (매개변수 지정하여 호출하기) 본문

6.개발/파이썬 공부하기

파이썬 함수 4 (매개변수 지정하여 호출하기)

정리합니다 2020. 11. 29. 15:38
반응형

# 매개변수 지정하여 호출하기

함수를 호툴할 때 매개변수를 지정할 수도 있다.

다음 예를 보자.

>>> def add (a,b):
	return a+b

 

앞에서 알아본 add 함수이다. 이 함수를 다음과 같이 매개변수를 지정하여 사용할 수 있다.

 

-> a에 3, b에 7을 전달하기

>>> result = add(a=3, b=7)
>>> print(result)
10

 

 

매개변수를 지정하면 다음과 같이 순서에 상관없이 사용할 수 있다는 장점이 있다.

>>> result = add(b=5, a=3)
>>> print(result)
8

 

 

 

# 입력값이 몇 개가 될지 모를 때는 어떻게 해야 할까?

입력값이 여러 개일 때 그 입력값을 모두 더해 주는 함수를 생각해 보자.

하지만 몇 개가 입력될지 모를 때는 어떻게 해야 할까? 아마도 난감할 것이다.

파이썬은 이런 문제를 해결하기 위해 아래와 같은 방법을 제공한다. 일반적으로 볼 수 있는 함수 형태에서 괄호 안의 매개변수 부분이 *매개변수로 바뀌었다.

 

 def 함수이름 (*매개변수):

    수행할 문장

    ...

 

 

여러 개의 입력값을 받는 함수 만들기

다음 예를 통해 여러 개의 입력값을 모두 더하는 함수를 직접 만들어 보자. 예를 들어 add_many(1, 2)이면 3을, add_many(1, 2, 3)이면 6을, add_many(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)이면 55를 돌러주는 함수를 만들어 보자.

>>> def add_many(*args):
	result = 0
	for i in args:
		result = result + i
	return result

>>> 

위에서 만든 add_many 함수는 입력값이 몇 개이든 상관이 없다. *args처럼 매개변수 이름 앞에 *을 붙이면 입력값을 전부 모아서 튜플로 만들어 주기 때문이다. 만약 add_many(1, 2, 3)처럼 이 함수를 쓰면 args는 (1, 2, 3)이 되고, add_many(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)처럼 쓰면 args는 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)이 된다. 여기에서 *args는 임의로 정한 변수 이름이다. *pey, *python처럼 아무 이름이나 써도 된다.

 

※ args는 매개변수를 뜻하는 영어 단어 arguments의 약자이며 관례적으로 자주 사용한다.

 

 

 

실제로 이 함수를 직접 실행해 보자.

>>> result = add_many(1, 2, 3)
>>> print(result)
6
>>> result = add_many(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
>>> print(result)
55

add_many(1, 2, 3)으로 함수를 호출하면 6을 돌려주고, add_many(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)을 대입하면 55를 돌려준다.

 

 

 

 

여러 개의 입력을 처리할 때 def add_many("args)처럼 매개변수로 *args만 사용할 수 있는 것은 아니다. 다음 예를 보자.

>>> def add_mul(choice, *args):
	if choice == "add":
		result = 0
		for i in args:
			result = result + i
	elif choice == "mul":
		result = 1
		for i in args:
			result = result * i
	return result

>>> 

add_mul 함수는 여러 개의 입력값을 의미하는 "args 매개변수 앞에 choice 매개변수가 추가되어 있다.

이 함수는 다음과 같이 사용할 수 있다.

 

>>> result = add_mul('add', 1,2,3,4,5)
>>> print(result)
15
>>> result = add_mul('mul',1,2,3,4,5)
>>> print(result)
120

매개변수 choice에 'add'가 입력된 경우 *args에 입력되는 모든 값을 더해서 15를 돌려주고, 'mul'이 입력된 경우 *args에 입력되는 모든 값을 곱해서 120을 돌려준다.

 

 

 

* 키워드 파라미터

이번에는 키워드 파라미터에 대해 알아보자. 키워드 파라미터를 사용할 때는 매개변수 앞에 별 두개(**)를 붙인다. 역시 이것도 예제로 알아보자. 먼저 다음과 같은 함수를 작성한다.

>>> def print_kwargs(**kwargs):
	print(kwargs)

	
>>> 

print_kwarge 함수는 매개변수 kwargs를 출력하는 함수이다. 이제 이 함수를 다음과 같이 사용해보자.

>>> print_kwargs(a=1)
{'a': 1}
>>> print_kwargs(name='foo', age=3)
{'name': 'foo', 'age': 3}

입력값 a=1 또는 name='foo', age=3이 모두 딕셔너리로 만들어져서 출력된다는 것을 확인할 수 있다.

즉 **kwarge처럼 매개변수 이름 앞에 **을 붙이면 매개변수 kwarge처럼 매개변수 이름 앞에 **을 붙이면 매개변수 kwargs는 딕셔너리가 되고 모든 key=value 형태의 결과값이 그 딕셔너리에 저장된다.

※ 여기에서 kwargs는 keyword arguments의 약자이며 args와 마찬가지로 관례적으로 사용한다.

 

 

 

 

반응형
Comments