<jupyter_start><jupyter_text>Iterator(순서있음), Generator- iterable : 순서가 있는 데이터 집합- iterator : 반복적으로 실행할때마다 다른 결과값이 나오는 함수, 값 생성기- iteration : iterator에서 값을 가져오는 행위<jupyter_code># 이터레이터 만들기
ls = [1, 2, 3]
it = iter(ls)
# 이터레이션 함수
next(it)
# 피보나치수열을 객체로 만들어낼수 있는 클래스 만들기

class Fib:
    def __init__(self):
        self.prev = 0
        self.curr = 1

    ## 특별한 method   -> method=class안에있는 함수
    def __next__(self):   # next함수 : 재정의해준다
        value = self.curr
        self.curr += self.prev
        self.prev = value
#         self.prev, self.curr = self.curr, self.prev + self.curr
        return value<jupyter_output><empty_output><jupyter_text>python 홈페이지 첫 화면에 있는 피보나치수열![image.png](attachment:image.png)<jupyter_code># 객체로 만들기
fib = Fib()
# 피보나치수열 출력
for _ in range(10):
    print(next(fib), end=" ")<jupyter_output>1 1 2 3 5 8 13 21 34 55<jupyter_text>제너레이터- 이터레이터를 간단하게 만든것- iter(), next() 함수들을 사용해서 클래스로 작성하는 번거로움이 없음;- yield, yield from : 함수에 yield, yield from이 있으면 그 함수가 제너레이터 함수<jupyter_code># 제너레이터 : yield 라는 예약어를 쓰면 더 간단하게 만들수 있다.
# - 함수가 실행하다가 yield를 만날때마다  데이터 1개 리턴하고 멈춘다.
def fib():
    prev, curr = 0, 1
    while True:
        yield curr    
        prev, curr = curr, prev + curr
%whos
f = fib()
for _ in range(10):
    print(next(f), end=" ")
def test():
    yield 1
    yield 2
    yield 3
t = test()
next(t)
### yield from

def test1():
    ls = [1, 2, 3]
    yield ls
t1 = test1()
next(t1)  # [1,2,3] -> stop!!
def test2():
    ls = [1, 2, 3]
    yield from ls
t2 = test2()
next(t2)  # 1 -> 2 -> 3 -> stop!!<jupyter_output><empty_output><jupyter_text>Comprehension- list, set, dict<jupyter_code>## list comprehension
## - 반복문을 써서 나온 결과값 데이터들을 리스트로 만들어냄

[number * number for number in range(5)]
## set comprehension 
## - yield로 나온 결과값 데이터를 set으로 만들어줌. 중복된데이터 사라짐.

{number % 3 for number in range(5)}
## dict comprehension

{number: number * number for number in range(5)}<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.12797927461139896, 'fraction_numerical': 0.027461139896373058, 'mean_word_length': 3.0911016949152543, 'pattern_counts': {'":': 0, '<': 16, '<?xml version=': 0, '>': 21, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '409385', 'license': 'MIT', 'n_tokens_mistral': 1019, 'n_tokens_neox': 1181, 'n_words': 241, 'path': 'Programming_onlineNote/06-01_iterator_generator.ipynb', 'repo_name': 'sukyeonging/TIL', 'size': '1930'}