pbj0812의 코딩 일기

[PYTHON] next, send, iter 본문

ComputerLanguage_Program/PYTHON

[PYTHON] next, send, iter

pbj0812 2020. 6. 7. 22:33

0. 목표

 - next, send, iter 실습

1. 실습

 1) next

  - 코루틴 함수의 첫 번째 yield까지 호출한다음 대기

  (1) 함수 생성

def next_test(i):
    print('start')
    while True:
        yield i
        i += 1
        print('end')

  (2) 인스턴스 생성

a = next_test(1)

  (3) next 실행

next(a)

   - 결과

start
1

 (4) next 다시 실행

next(a)

   - 결과

end
2

 2) send

  - yield 구문을 특정 변수에 할당하여 코루틴과 메인루틴이 서로 통신하게 함

  (1) 함수 생성

def send_test2(i):
    print('start')
    while True:
        value = yield i
        print(value)
        i += value
        print('end')

  (2) 인스턴스 생성

b = send_test2(1)

  (3) next 실행

next(b)

   - 결과

start
1

  (4) send 실행

b.send(10)

   - 결과

10
end
11

 3) iter

  - 반복을 끝낼 값을 지정하면 특정 값이 나올 때 반복 종료

  (1) 예제 1

   - 0에서 5까지 숫자를 랜덤하게 출력하면서 2가 출력 되면 멈추는 형태

import random
it = iter(lambda : random.randint(0, 5), 2)
while True:
    print(next(it))

  - 결과

5
5
1
5
1
0
1
4
1
4
1
1
0
0
4
4
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-178-736265e1ffb3> in <module>
      1 while True:
----> 2     print(next(it))

StopIteration: 

  (2) 예제 2

   - 리스트 등으로 받아서 사용도 가능

it = iter([1, 2, 3])
print(it)

   - 결과

<list_iterator object at 0x109498150>

   * 활용

for i in it:
    print(i)

   - 결과

1
2
3

2. 참고

 - [python] 코루틴, 서브루틴과 비교

 - iter, next 함수 활용하기

 

'ComputerLanguage_Program > PYTHON' 카테고리의 다른 글

[PYTHON] handcalcs 라이브러리를 통한 수식 작성  (0) 2020.08.21
[PYTHON] sweetviz를 통한 EDA  (0) 2020.08.19
[PYTHON] 삼항연산자  (0) 2020.06.06
[PYTHON] reduce  (0) 2020.06.02
[PYTHON] filter  (0) 2020.06.02
Comments