python generator

  1. >>> lst_num = [1,2,3] 
  2. >>> iter = (i for i in lst_num) 
  3. >>> print iter.next 
  4. <method-wrapper 'next' of generator object at 0xb71566e4> 
  5. >>> print iter.next() 
  6. >>> print iter.next() 
  7. >>> print iter.next() 
  8. >>> print iter.next() 
  9. Traceback (most recent call last): 
  10.   File "<stdin>", line 1, in <module> 
  11. StopIteration 

 

  1. >>> def use_yield(): 
  2. ...    for i in range(10): 
  3. ...      yield(i) 
  4. ...  
  5. >>>  
  6. >>> iter = use_yield() 
  7. >>> iter.next() 
  8. >>> iter.next() 
  9. >>> iter.next() 

 

  1. >>> def use_send(): 
  2. ...   print 'how are you?', 
  3. ...   m = yield('55555') 
  4. ...   print m 
  5. ...   n = yield('aaaaaaaaaaa') 
  6. ...   print 'ok!' 
  7. ...  
  8. >>> test = use_send() 
  9. >>> test.send(None) 
  10. how are you? 
  11. '55555' 
  12. >>> test.next() 
  13. None 
  14. 'aaaaaaaaaaa' 
  15. >>> test.next() 
  16. ok! 
  17. Traceback (most recent call last): 
  18.   File "<stdin>", line 1, in <module> 
  19. StopIteration 
  20. >>> test = use_send() 
  21. >>> test.next() 
  22. how are you? 
  23. '55555' 
  24. >>> test.send('fine,3Q.') 
  25. fine,3Q. 
  26. 'aaaaaaaaaaa' 

第一個例子是告訴怎麼輸出generator對象

第2個是使用 yield 產生generator對象

第3個例子涉及到generatorde 原理,

  1. m = yield('55555')  
  2. 相當於下面僞代碼
  3. print(‘55555’)       //輸出55555
    m = wait_and get()   //等待輸入,並把值返給m,另外告訴next() = send(None)

詳細解釋參考http://blog.donews.com/limodou/archive/2006/09/04/1028747.aspx

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章