함수를 사용하는 이유
반복되는 부분이 있을 경우 '반복적으로 사용되는 가치 있는 부분'을 한 뭉치로 묶어서 '어떤 입력값을 주었을 때 어떤 결괏괎을 돌려준다'라는 식의 함수로 작성하는 것이 현명하다. 또 다른 이유는 자신이 만든 프로그램을 함수 화하면 프로그램 흐름을 일목 요연하게 볼 수 있기 때문이다.
파이썬 함수의 구조
def는 함수를 만들 때 사용하는 예약어이며, 함수 이름은 함수를 만드는 사람이 임의로 만들 수 있다. 함수 이름 뒤 괄호 안의 매개변수는 이 함수에 입력으로 전달되는 값을 받는 변수이다. 이렇게 함수를 정의한 다음 if, while, for문 등과 마찬가지로 함수에서 수행할 문장을 입력한다.
매개변수와 인수
매개변수(parameter)와 인수(arguments)는 혼용해서 사용되는 헷갈리는 용어이므로 잘 기억해 두자. 매개변수는 함수에 입력으로 전달된 값을 받는 변수를 의미하고 인수는 함수를 호출할 때 전달하는 입력값을 의미한다. 그리고 여기에서 return은 함수의 결괏값을 돌려주는 명령어이다. 결괏값은 오직 return명령어로만 돌려받을 수 있다.
입력값이 몇 개가 될지 모를 때는 어떻게 해야 할까?
입력값이 여러 개일 때 그 입력값을 모두 더해 주는 함수를 생각해 보자. 하지만 몇 개가 입력될지 모를 때는 어떻게 해야 할까? 아마도 난감할 것이다. 파이썬은 이런 문제를 해결하기 위해 다음과 같은 방법을 제공한다.
일반적으로 볼 수 있는 함수 형태에서 괄호 안의 매개변수 부분이 *매개변수로 바뀌었다
위에서 만든 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의 약자이며 관례적으로 많이 사용한다.
함수의 결괏값은 언제나 하나이다.
위 코드를 호출하면
결괏값은 a+b와 a*b 2개인데 결괏값을 받아들이는 변수는 result 하나만 쓰였으니 오류가 발생하지 않을까? 당연한 의문이다. 하지만 오류는 발생하지 않는다. 그 이유는 함수의 결괏값은 2개가 아니라 언제나 1개라는 데 있다. add_and_mul 함수의 결괏값 a+b와 a*b는 튜플 값 하나인 (a+b, a*b)로 돌려준다.
즉 결괏값으로 (7, 12)라는 튜플 값을 갖게 되는 것이다.
'파이썬 > 파이썬정리' 카테고리의 다른 글
chapter4 - 파일 읽고 쓰기 (0) | 2021.07.21 |
---|---|
chapter3 - for문 (0) | 2021.07.18 |
chapter3 - while문 (0) | 2021.07.18 |
chapter3 - if문 (0) | 2021.07.18 |
백준 파이썬 문제 2530 - 인공지능 시계 (0) | 2021.07.17 |