본문 바로가기
방구석코딩/파이썬 기초문법

[파이썬 독학] 입력값의 수가 정해지지 않은 경우 함수 생성

by 석세상 2022. 6. 15.
반응형

앞에서 입력값이 정해지지 않은 경우 함수 정의하는 방법에 대해 알아보았다. 하지만 입력되는 값이 몇 개인지 모를 때는 어떻게 만들어야 할까? 여기서 혼동되는 부분이 있을 수 있는데 입력되는 값이라 함은 변수의 수와는 다른 개념이다.

 

 

예를 들어 변수의 수라는 건 x, y, z와 같은 변수가 있을 때 이는 변수의 수가 3개라 한다. 하지만 입력값이라고 하는 개념을 보면 x에 x1, x2, x3,... 의 값이 몇 개가 있느냐이다. 좀 더 풀어서 얘기해보자면 x에 들어가는 값이 1, 2, 3, 4와 같이 4개의 값만 있다면 입력값이 4개라는 것이다. 그렇기 때문에 만약 함수에 x, y, z의 변수가 있고, x에는 1,2,3,4, y에는 5,6,7,8, z에는 9, 10, 11, 12와 같은 값이 있다면 이 함수에는 x, y, z라는 3개의 변수가 있고, x, y, z에는 각각 4개의 입력값이 있다는 것으로 생각하면 된다. 처음 보면 상당히 혼동될 수 있는 개념이니 잘 이해가 되지 않는다면 여러 번 생각해보길 바란다.

 

 

입력받는 수가 정해지지 않은 경우 함수 문법

이와 같이 각 변수에 들어가는 입력값이 몇 개가 들어가는지 모르는 경우 함수를 생성하는 방법에 대해 알아볼 텐데 당연히 함수를 생성하는 문법이니 기본적인 함수 생성과 틀은 동일하다. 다만 차이가 있다면, 입력값의 수가 정해지지 않은 경우는 괄호 안에 들어가는 변수명 앞에 *를 붙인다는 것이다.

 

* 뒤에 있는 args는 정해져 있는 변수명은 아니나 통상적으로 프로그램 코딩 시 자주 사용하는 명이다. 관례적으로 사용하는 것이니 본인이 다른 변수명을 원한다면 다른 명으로 사용하면 된다. 함수 만들기에서는 괄호 안에 x를 입력했는데 원한다면 *x를 사용해도 문제 되지 않는 것이다. *를 붙이면 입력값을 튜플로 만들어준다는 것만 알아두자.

def 함수명(*args) :
    실행할 문장 1
    실행할 문장 2
    ....

 

 

예시를 통한 활용법

지난번 for문에서 사용한 예시와 유사한 결과를 나오게끔 만들어보자. 다만 차이가 있다면 for문에서는 매번 동일한 손님의 수가 정해져 있어 '1번째 손님 음료 나왔습니다.' ~ '10번째 손님 음료 나왔습니다.'라는 결과를 생성했다면 이번에는 음료를 만들 수 있는 재료는 충분한데 손님이 얼마나 올 수 있을지 알 수 없다고 하자. 따라서 그날 오는 손님 수에 따라서 출력할 수 있도록 만들어 보자. 기존의 for문의 예시가 생각나지 않는다면 아래 링크를 참고하면 된다.

[파이썬 데이터 분석] 또 다른 반복문 ② - For문 응용, break, continue, pass (tistory.com)

 

몇 명의 손님이 올 지 알 수 없고 그에 따라 반복하여 '몇 번째 손님 음료 나왔습니다.'라는 결과를 산출하기 위해 def문과 for문을 함께 결합하여 사용하였다. 여러 문법을 결합해서 사용했을 때에는 제일 안쪽에 있는 문법, 즉, 들여 쓰기가 가장 많이 되어 있는 부분부터 차근차근 풀어서 봐야 한다.

함수 활용 예시

 

먼저 1번 함수가 정의된 부분부터 풀어보자면 for문의 i는 변 수명이고 in 뒤의 args의 들어가 있는 값이 차례로 i에 입력되면서 실행된다. 하지만 우리는 args에 아직 몇 개의 입력값이 들어가는지 알 수 없다. 그래서 def문을 사용하는데 cust는 함 수명이고, 변수명에 args라는 변수명 앞에 *를 주게 된다.

 

2번은 정의한 함수를 실행하는 부분인데 우리가 함수명을 cust로 주었기 때문에 cust라고 쓰고 괄호 안에 입력값을 적어준다. 오늘은 3명의 손님이 왔기 때문에 1,2,3만 값을 입력하였다. 만약 다음날 손님이 5명이 온다면 괄호 안에 1,2,3,4,5라는 숫자를 주면 되는 것이다.

 

3번은 2번의 함수를 실행한 결과인데 1,2,3번의 손님이 왔기 때문에 for문을 통해 3번 반복하여 결과가 출력되는 것을 볼 수 있다. 

 

 

이와 같이 활용되는 경우는 없겠지만 기존의 for문과 유사한 결과를 출력하기 위해 다음과 같이 프로그램을 생성했는데 실 활용에 있어서는 조건도 더 많고 수행해야 하는 것이 더 많고 복잡한 경우가 많이 나올 것이다. 하지만 처음부터 복잡하게 시작하면 무슨 말인지 이해하기 어려워 포기하는 경우가 생긴다. 따라서 쉬운 것부터 하나씩 만들어서 나중에 거기에서 덧붙여서 만드는 것을 추천한다.

 

앞으로 진행됨에 따라 코드가 복잡해지고, 실제 활용을 위해서는 단편적인 명령어뿐 아니라 과거에 공부했던 내용을 결합하여 사용하는 경우가 많아진다. 앞에 내용이 제대로 숙지되지 않았다면 더 진도를 나가기보다는 하나씩 반복해 보면서 자신의 것으로 만드는 것이 추가로 어떤 걸 배우는 것보다 더 도움이 될 수 있다.

 

728x90
반응형

댓글