인수
인수는 함수로 전달되는 작업거리이며, 호출하는 쪽과 함수를 연결한다는 의미로 [매개변수]라고도 불린다.
함수 정의문의 인수를 [형식 인수]라고 하고, 함수 호출문에서 전달하는 인수를 [실인수]라고 한다.
아래의 예시의 경우에는 'n' 이 형식 인수, 10이 실인수다.
def calsum(n):
sum = 0
for num in range(n+1):
sum += num
return sum
print(calsum(10)) # 10까지의 수의 합을 구하는 함수 및 프린트
가변 인수
함수를 호출할 때 함수 정의문의 형식 인수 갯수만큼 실인수를 전달해야한다.
def calsum(ints):
sum = 0
for num in ints :
sum += num
return sum
print(calsum(1,2,3)) # 1,2,3의 합을 구하고 싶은 함수
===> 에러
이 경우에는 형식 인수는 ints 하나인데, 실인수는 1,2,3 세개이므로 에러가 난다.
이에 비해 [가변 인수]는 임의 개수의 실인수를 받는다.
형식 인수 이름 앞에 * 기호를 붙이면, 이 자리에 여러 개의 인수가 올 수 있다.
def calsum(*ints) :
sum = 0
for num in ints :
sum += num
return sum
print(calsum(1,2,3)) # 1,2,3의 합을 구하고 싶은 함수
==> 6
위처럼 * 기호를 붙인 가변 인수의 경우,
calsum의 함수는 정수의 합계를 구하되 갯수는 미리 정해져 있지 않다.
가변 인수는 이후의 모든 인수를 다 포함하게 때문에, 인수 목록의 마지막에 와야 한다.
가변 인수 앞에는 일반 인수가 올 수 있지만 뒤쪽에는 올 수 없다.
가변 인수 뒤에 일반 인수가 더 있으면 어디까지 가변인수인지 잘 구분되지 않기 때문이다.
calsum(s, *ints) #가능
calsum(*ints, s) #에러
calsum(*ints, *others) #에러
같은 이유로, 가변 인수가 2개 이상 있어도 안된다.
제일 마지막에 딱 하나만 와야한다.
가변인수의 가장 대표적인 사례가 print문이다.
개수와 타입에 상관 없이 콤마로 구분하여 전달하면 된다.
인수의 기본값
다음은 step인수를 추가하며, 2씩 건너 뛰면서 합을 구하는 함수다.
첫번째 print "1~10"은 1부터 2씩 건너뛰며 홀수의 합을 구하고,
두번째 print "2~10"은 2부터 2씩 건너뛰며 짝수의 합을 구한다.
def calstep(begin, end, step) :
sum = 0
for num in range(begin, end + 1, step):
sum += num
return sum
print("1 ~ 10 = ", calstep(1, 10, 2)) # 1부터 2씩 건너뛰며 10까지의 홀수 합을 구함
print("2 ~ 10 = ", calstep(2, 10, 2)) # 2부터 2씩 건너뛰며 10까지의 짝수 합을 구함
===> 1 ~ 10 = 25
===> 2 ~ 10 = 30
인수가 추가 되면 더 세밀한 작업지시가 가능하져 다양하게 활용이 가능하지만,
증감값이 1인 경우에도 꼭 1을 전달해야 하는 불편함이 있다.
예를 들어, 위 함수를 앞으로 ~N까지의 합계를 구하는데 계속 사용할 것이다.
100까지의 모든 정수의 합계를 구하려면 항상 다음과 같은 형식으로 호출해야한다.
calstep(1, 100, 1)
이 함수를 사용할 때는 증감값은 웬만하면 1인 경우가 대부분인데,
이 값을 일일이 전달해야하니 불편함이 발생한다.
이처럼 잘 바뀌지 않는 인수는 인수 목록에 기본값을 지정해두면 편하다.
기본값이 있는 인수는 일종의 옵션으로 취급되어 생략이 가능하다.
예를들어 print("a","b") 를 돌리면
<a b> 다음과 같이 한칸 띄어서 출력된다.
print의 기본값이 있는 인수 sep이 자동으로 한칸을 띄어서 출력해주는 것이다.
이제 calstep 함수에 기본값을 적용해보면 다음과 같다.
def calstep(begin, end, step = 1) :
sum = 0
for num in range(begin, end + 1, step):
sum += num
retunr sum
print("1 ~ 100 = ", calstep(1, 10))
print("1 ~ 100 = ", calstep(1, 10, 2))
step 인수에 기본값을 입력했으므로,
첫번째 print "1~100" 에서는 step 인수를 따로 주지 않아도 기본값 = 1이 적용되어
1~100까지의 모든 정수의 합이 출력된다.
두번째 print "1~100" 에서는 step 인수에 2를 주었기 때문에
1~100까지의 모든 짝수의 합이 출력된다.
'코딩 > 💻 Python' 카테고리의 다른 글
Python 파이썬 함수 기본 구조 (0) | 2021.12.24 |
---|