여기서는 파이선 빌트인 함수들에 대해 간단히 논해 보자.

range

integer stop, start, step을 인자로 받아서 조건에 맞는 iterator를 리턴해 준다.

range(stop)

첫 번째는 단순하게 0부터 1씩 증가해서 stop까지 도달하는 iterator를 돌려준다.

range(start, stop[, step])

start부터 step만큼 증가해서 stop까지 도달하는 iterator를 돌려준다. step은 생략 가능하므로 []로 표현되어 있다.

간단한 예를 살펴보자.

>>> a = range(10)
>>> a
range(0, 10)
>>> list(a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(5,10))
[5, 6, 7, 8, 9]
>>> list(range(-10,10, 3))
[-10, -7, -4, -1, 2, 5, 8]

range()는 리스트를 돌려주는 함수가 아니다. 정확히 말하면 Range 타입을 리턴해 준다. 리스트 전체를 돌려주지 않고, 값을 ㅇ청할 때 다음 값을 생성해서 전달하므로 1~1000000까지의 리스트를 만드는 것보다 range(1,1000000)를 쓰는 것이 효율적이며, 이 숫자가 크면 클수록 더욱 효율적이 된다.

sum

iterable의 합을 구한다.

sum(iterable[, start])

start는 생략 가능하다.

iterable은 반복 가능한 것들을 말한다. 반복 가능한 것들이라 함은 자신이 가진 멤버를 한 번에 하나씩 가져올 수 있는 것들을 말하는데, 예를 들어 list가 있겠다. 그 외에도 str(문자를 하나씩 가져올 수 있다.), tuple, dict 등 여러가지가 있다.

>>> c = {'a': 1, 'b': 2}
>>> c.values()
dict_values([1, 2])
>>> sum(c.values())
3
>>> d = {1: 2, 3:4, 5:6}
>>> sum(d)
9
>>> sum(range(4))
6
>>> (1,2) # tuple
(1, 2)
>>> sum((1,2))
3

iterable한 것들을 예를 들면 이런 것들이 있다.

  1. 모든 순차열 타입(list, str, tuple, 그리고 이들을 상속하는 것들)
  2. some non-sequence types(이를테면 dict와 같은 것들)
  3. iter(), getitem()등이 구현된 클래스의 오브젝트