数学建模社区-数学中国

标题: 关于Python的生成器和迭代器 [打印本页]

作者: 爱是你我    时间: 2015-4-10 14:10
标题: 关于Python的生成器和迭代器
Python的生成器语法,会返回一个生成器对象,而用iter()函数,也能返回一个带有next()方法的可迭代对象,这样的话··按照我下面的写法,2者会有什么区别吗?如果一样,那生成器岂不是没用了?(所以·····) ; t$ x& A9 I7 y/ m

+ R. y4 b! P9 @6 M( Adef createGenerator() : 4 n9 n  `* R* {, y
    mylist = range(10) 2 D% @8 e$ L% ~2 x4 I* z

8 ?! f7 |& L7 u  L    for i in mylist : + m; m+ Z; H' ]) ^6 t
        yield i*i : Z' Z6 l$ Y1 P4 S! A8 x

! h, g0 @4 q" q8 s( tmygenerator = createGenerator() # create a generator   ~' Q2 L  \" [
print mygenerator
7 @1 h2 ^, h% I) C( s" [* q6 ?1 A$ `% @" a: Y. t, Q: d, U
def createIterator() : 7 f0 ?# W- R, X
    mylist = range(10)
; E$ w$ N+ V7 h- Y- w% H+ o  L; B2 d7 G) F) w6 t
    return iter([i * i for i in mylist]) - d$ Z  V8 `8 J6 {3 f; n* w+ S
' c4 x6 [% u4 ^. P
myiterator = createIterator() . E9 i8 a1 M! C2 p
print myiterator
7 ]% `+ W6 W& M; Q" \
* y' G: S; }8 ^! C, i- p
作者: 美人如花    时间: 2015-4-10 14:16
$ N3 a- R1 }$ ^
9 a9 s7 [8 W2 f" p5 q% u
! z! N) z7 f4 l& |" z

$ J8 d( s% y" s! v, OCat_He 2015-04-07 20:38:08 . N- _$ k, _4 q0 v/ @  |7 ^
4 g9 C9 {4 a0 N# e
这样理解?=>生成器是一种懒惰的迭代器 & h$ _! D) x' ~- x
) d2 ~6 n* @0 |
事实上,在Python3.x中许多原来在Python2.x中返回迭代器的地方都换成了返回生成器,更加优雅,安全,好用3 ?3 |8 D7 D5 f9 K) |! }1 J

0 m" i( E( j( j




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5