안녕하세요. BlockDMask 입니다.
오늘은 파이썬 내장함수 중에서 iterable의 합을 구하는 함수 sum에 대해서 알아보려 합니다.
정말 간단합니다. 하지만, 두번째 매개변수의 존재를 아는 순간 조금 헷갈릴 수도 있습니다.
그렇지만 제가 잘 풀어서 쉽게 설명해보겠습니다. 도전!
<목차>
1. sum 함수 설명
2. sum(iterable) 함수 예제
3. sum(iterable, start=0) 함수 예제
1.python sum 함수 설명
sum함수 기본 모양
sum(iterable)
인자 : iterable한 자료형을 받으며 numeric 해야합니다. 즉, 리스트나 튜플 처럼 인덱스 순환 접근이 가능한 자료형이고 내부에 숫자로만 이루어져 있어야합니다. 여기서 숫자는 정수, 실수 둘다 가능입니다
반환형 : 인자로 들어온 iterable 내부 모든 요소의 합
조금더 자세히 볼게요
sum함수의 진짜 정의 부분
sum(iterable, start = 0)
이런 모양의 함수 입니다.
첫번째 인자 : iterable하고 숫자데이터가 들어간 객체, 변수
두번째 인자 : 처음으로 또 더해줄 숫자
반환 : iterable의 합 + start 값
두번째 인자의 쓰임 : 첫번째 인자로 들어온 iterable에 두번째 인자 까지 더해줍니다.
두번째 인자는 default = 0 이기 때문에 첫번째 인자로 비어있는 리스트나 튜플이 들어오면 보통은 0을 반환합니다. (그렇기 때문에 오해를 조금 합니다. 비어있을때 반환하는 숫자라고.)
만약 iterable이 비어있을때 특정한 값을 반환하게 하고싶다면 두번째 인자에 해당 값을 넣어주면 됩니다. 이게 결과적으로는 맞는 말이긴하지만, 더 정확하게 풀어서 말하자면 아래와 같습니다.
오해하지 말아야 할 것이 비어있을 때 두번째 인자가 나온다고 해서 비어있지 않을때 영향을 안 준다고 생각하실 수 있는데 start 값이 0 이기 때문에 iterable에 영향을 안주는것처럼 보이지만, 실제로는 start 도 포함하여 다 더한 값을 반환합니다. 설명하기가 어렵네요. 아래 3번 예제에서 실제 예시로 보여드릴게요.
2.python sum(iterable) 예제
# ==========================================================
# sum(iterable) 에제 1 : 리스트
result1 = sum([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(result1) # 출력 : 55
# ==========================================================
# sum(iterable) 에제 2 : 숫자가 아닌 값이 들어간 리스트
a = [1, 2, 'python', 4, 5, 'BlockDMask', 7, 8, 9, 10]
result2 = sum(a)
# print(result2) # 출력 : 숫자가 아닌 값이 있기 때문에 error
# ==========================================================
# sum(iterable) 에제 3 : 튜플
b = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
result3 = sum(b)
print(result3) # 출력 : 55
# ==========================================================
# sum(iterable) 에제 4 : 비어있는 리스트와 튜플
c = []
d = ()
result4 = sum(c)
result5 = sum(d)
print(result4) # 출력 : 0
print(result5) # 출력 : 0
이렇게 리스트나 튜플을 인자로 sum 함수를 사용할 수 있습니다.
예제 2번을 보시면 숫자가 아닌 값이 들어갔기 때문에 sum 함수가 제대로 작동하지 못하고 error를 뱉게 됩니다. 이렇게 sum(iterable)함수의 첫번째 인자로 들어오는 튜플 혹은 리스트는 무조건 숫자들로만 이루어져 있어야 합니다.
예제 4번과 같이 비어있는 리스트나 튜플을 인자로 넣게 되면 반환값이 0이 나오게 됩니다. 비어있는 리스트나 튜플이 들어올때 0이 아니라 다른 값을 반환하게 하고싶으면 어떻게 할까요?
그것은 바로 아래에서 소개해 드리겠습니다.
3. python sum(iterable, start = 0) 예제
# ==========================================================
# sum(iterable, start = 0) 에제 1 : 두번째 인자의 값을 정해주지 않았을 때
result1 = sum([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
result2 = sum([])
# start에 아무것도 넣지 않으면 0이 들어간것과 같기 때문에 0이 더해져서 결과가 아래와 같습니다.
print(result1) # 출력 : 55 (리스트) + 0 (start) = 55
print(result2) # 출력 : 0 (리스트) + 0 (start) = 0
# ==========================================================
# sum(iterable, start = 0) 에제 2 : 두번째 인자의 값을 정해줬을 때
result3 = sum([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 1111)
result4 = sum([], 1111)
# start 에 1111을 넣었기 때문에 첫번째 인자의 합과 1111 이 더해진 값이 나옵니다.
print(result3) # 출력 : 55 (리스트) + 1111 (start) = 1166
print(result4) # 출력 : 0 (리스트) + 1111 (start) = 1111
result1과 2는 리스트에 0을 더했기 때문에 우리가 예상한것과 동일하게 나오게 됩니다.
result3, 4를 보면 두번째 인자인 start 값이 0 이 아닌 1111이기 때문에 명확하게 start가 어떤식으로 동작하는지 알 수 있습니다. 추가 설명을 하자면 sum(iterable, start)는 start값 + iterable합 입니다. 이걸 result3번으로 표현해보면 1111 + (1+2+3+4+5+6+7+8+9+10) 을 해서 1111 + 55 = 1166이 나오게 되는 것 입니다.
더이상 sum 함수 두번째 인자 때문에 헷갈리지 말아요 우리.
감사합니다. 오늘의 포스팅 마치겠습니다.
'<개인공부> > [Python]' 카테고리의 다른 글
[python] 파이썬 format 함수 (문자열 포매팅 방법 1) (12) | 2020.09.17 |
---|---|
[python] 파이썬 while문(반복문) 정리 및 예제 (3) | 2020.09.13 |
[python] 파이썬 반올림 round 함수에 대해서 (2) | 2020.09.07 |
[python] 파이썬 대문자 소문자 변경 함수 (upper, lower, isupper, islower) (0) | 2020.09.02 |
[python] 파이썬 max함수, min함수에 대해서 (7) | 2020.08.21 |
[python] 파이썬 count, len 함수 설명과 에제 (2) | 2020.08.14 |
[python] 파이썬 몫과 나머지 구하기 divmod 함수와 //, %기호 (1) | 2020.08.03 |
[python] 파이썬 크롤링 (네이버 실시간 검색어) (15) | 2019.12.16 |