반복(Iterable)을 제어할 수 있는 루틴 형태 혹은 객체를 뜻함. 일반적으로 반복문은 정해진 range까지 전부 순회를 하는 반면 Generator를 사용하면 순회를 제어할 수 있게 된다. 예를 들어 1번째 값을 얻은 후 다른 작업을 하다 두번째 값을 얻을 수 있다는 말.
yield를 통해서 쉽게 구현이 가능함. return과 역할이 비슷한데 함수에서 return을 하면 함수가 종료되는 반면 yield는 함수를 종료시키지 않고 Generator를 반환한다. 반환된 Generator는 next 함수를 통해 제어가 가능함
def hi():
num = 0
while True:
num += 1
yield num
gen = hi() #generator 반환함
next(gen) #0을 반환함.
next(gen) #1을 반환함
for 단축 구문도 generator을 반환한다.

대표적인 generator 함수로 range가 있음. range는 iterable한 속성을 가지며 for문에서 많이 사용되는데 이 또한 인덱스에 접근할 때 값을 생성하는 구조라고 보면 됨
range(0,10) #range(0, 5)출력
list(range(0,10)) #[0,1,2,...,9]
for num in range(0,10): #반복문에서 많이 사용됨
pass
import sys
sys.getsizeof(range(0,10000000)) #48 반환
iter 함수를 사용하면 iterable한 객체를 iterator 객체로 만들 수 있음.
iterator는 next() 함수를 통해서 값 순회를 제어할 수 있음(Generator와 똑같). 또한 __next__ 메소드를 통해서 직접 실행도 가능함
iter([1,2,3])
[참고] https://wikidocs.net/16068
[참고] https://shoark7.github.io/programming/python/difference-between-__repr__-vs-__str__
repl은 객체를 표현하는 함수로 문자열을 반환함. 보통 우리가 대화형(REPL)으로 코딩을 할 때 객체를 치면 나오는 구문이 repl을 통해서 나온 것이라고 보면 됨. 클래스에 __repl__ 을 통해서 값을 바꿔줄 수 있는데 repl 메소드에 값을 넣으면 __repl__을 호출함
repl(3) #"3"
repl([1,2,3]) #'[1,2,3]'
class Custom:
def __repl__(self):
return "Custom Repl"
repl(Custom()) #"Custom Repl
str은 객체를 문자열화할 때 사용함. print할 때 객체의 __str__이 불리며 str은 __str__을 호출한다고 보면 됨.
str(3) #3
class Custom:
def __str__(self):
return "Custom Str"
str(Custom()) #Custom Str