[Python] 파이썬 병행성#1

아직·2022년 6월 8일
0
post-thumbnail

1)

for c in t:
   print(c)

iter함수로 iterable한 t를 호출해서 next라는 함수로 하나 하나 프린트한 것.(dir로 __iter__와 __next__를 확인할 수 있다.) print(next(iter(t)))의 반복이라고 볼 수 있다. 이때 중요한 것은 매 시행마다 순서를 기억하고 있다는 점이다.

2)

t = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
w = iter(t)
print(next(w))
class WordSplitGenerator:
   def __init__(self, text):
       self._text = text.split(' ')

   def __iter__(self):
       for word in self._text:
           yield word #이게 바로 제너레이터, return조차 필요 없다
       return
   def __repr__(self):
       return 'WordSplitGenerator(%s)' % (self._text)
        
wg= WordSplitGenerator('Do today what you could do tomorrow')
wt = iter(wg) #__iter__를 발동시키는 느낌
print(next(wt))

wg 변수 선언 후 해당 문구는 ['Do', 'today'... 'tomorrow'] 형태일 것이다. 위 사례에서 iter(t)는 next(w)에 앞서 'ABCD...'를 순서 세워주는 것과 비슷하게, 문자열 형태가 아닌 리스트를 요소화 시켜(for in) yield로 순서를 얻는 작업(위치 정보를 기억해서 iterable하게 만드는 연마 작업)으로 보인다.

반면 next 패턴은 iterable하게 만들기고 next 함수를 실행하는 게 아닌, next 메소드가 다음 인자를 잡을 수 있도록 '영점 조정하기'에 가까워 보인다.

3)

def generator_ex1():
    print('Start')
    yield 'A point'
    print('Continue')
    yield 'B point'
    print('End')

temp2 = [x * 3 for x in generator_ex1()]
temp3 = (x * 3 for x in generator_ex1())

print(temp2)
print(temp3) #line14의 iter-> print 효과와 비슷하다?

for i in temp2: #print 부분 없이 리스트만 반복
    print(i)
for i in temp3: #print는 한 번, 요소는 세 번 반복
    print(i)

temp2는 generator 내용의 반복에 가깝고, temp3는 generator 기능의 반복에 가깝다.

0개의 댓글