이어서 파이썬의 펑션에 관한 내용을 좀 더 알아보자.
지난 글에서는 펑션을 정의하는 방법과 호출, 그리고 매개변수와 반환자를 이용한 데이터 전달에 관한 내용을 포스팅하였다. 오늘은 펑션의 매개변수에 관한 내용을 좀 더 알아보고자 한다.
위 그림에서 fcSetNames라는 이름의 펑션을 정의하고 있다. 여기서 펑션의 매개변수를 보면, 이전 글에서의 매개변수와 달리 asterisk 기호 (*)가 붙어 있다.
C 계열의 언어로 프로그래밍을 해본 경험이 있다면, 이 별표 모양에서 포인터를 먼저 떠올릴 수도 있다. 하지만, 파이썬에서는 포인터가 없다. ㅎㅎ
매개변수를 별표와 함께 사용하는 것은 여러 데이터를 하나의 데이터 타입으로 묶어서 전달 받겠다는 의미이다. 다시 말해, 위 그림에서 펑션은 *sNames라는 매개변수를 하나만 가지고 있지만, 펑션을 호출할 때 여러 개의 데이터를 전달할 수 있고, 펑션은 전달된 여러 개의 데이터를 하나의 데이터 타입으로 묶어서 사용한다는 의미이다.
실제로 여러 데이터와 함께 펑션을 호출한 결과를 위 그림을 통해 확인할 수 있다. 앞에서 이야기한 대로, 여러 개의 데이터를 전달하였을 때, 펑션은 이 데이터들을 튜플 타입으로 전달 받아 처리한다는 것을 알 수 있다. 그리고, 인터피리팅 과정에서 전달되는 데이터에 따라 타입을 변환하는 파이썬 답게 여러 타입의 데이터도 무리 없이 전달되는 것도 확인할 수 있다.
튜플 형식으로 여러 데이터를 전달 받는다고 해서, 다른 타입의 데이터를 전달받지 못하는 것은 아니다. 위 그림의 예를 보면, sName이라는 이름의 매개변수 하나와 info라는 이름의 별표가 붙은 매개변수를 갖는 펑션이 정의되어 있고, 실제로 호출했을 때의 결과를 보여주고 있다.
이쯤에서 눈치 빠른 사람들은 바로 알아챘겠지만, 별표 표시와 함께 사용되는 매개변수는 펑션을 호출할 때 전달되는 데이터의 위치를 이용해서 구분한다. 다시 말해, 위 그림과 같이 복수의 매개변수가 정의된 펑션의 호출에서, 괄호 안에 배치되는 매개변수의 순서에 따라 앞에서부터 차례로 데이터가 전달되고, 나머지 데이터들을 튜플로 묶어서 별표가 붙은 매개변수로 전달한다는 의미이다.
따라서, 위 그림과 같은 방식으로는 사용할 수 없다는 것을 유념하자.
앞에서 설명했던 방식이 하나의 매개변수를 통해 여러 데이터를 튜플로 전달 받는 방식이었다면, 위 그림은 딕셔너리로 전달 받는 방식을 보여주고 있다.
정의된 펑션은 **info 라는 하나의 매개변수를 가지고 있지만, 펑션을 호출하는 4번 라인의 코드에서는 Name과 Age, Gender라는 명칭과 함께 여러 데이터를 전달하고 있다. 그리고, 프로그램의 실행 결과를 통해 알 수 있듯이, 전달된 데이터는 짝을 이루는 명칭과 함께 딕셔너리로 변환되어 전달된다.
위 그림을 통해 확인할 수 있듯이, 지금까지 살펴본 가변인수들은 혼용이 가능하다. 그리고, 이런 가변인수들을 사용함으로써 유연하고 자유스러운 파이썬 코드를 작성할 수 있게 만들어준다. 하지만, 지나치게 남용되는 경우, 코드 자체의 이해를 심각하게 저해할 수 있다는 점도 유념해야 할 것이다.
'Programming > Python' 카테고리의 다른 글
Python: Function (4) (0) | 2021.01.19 |
---|---|
Python: Function (3) (0) | 2021.01.17 |
Python: Function (1) (0) | 2021.01.12 |
Python: Comprehension (0) | 2021.01.05 |
Python: Dictionary (0) | 2021.01.03 |