数学建模社区-数学中国

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

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

" j& u( o: K( x  c; tdef createGenerator() : / z; U: Y, U: ]" D: r
    mylist = range(10)
, h, Z$ u' G; s  k
- N' C* V7 O6 ~7 G7 \) q6 F: n    for i in mylist : . |8 e: m) j& {0 l* P& L6 S; K7 N* a
        yield i*i ( D2 R5 a. f( t# \
5 a7 d0 A1 l( Q1 C
mygenerator = createGenerator() # create a generator   J2 W7 p: C' y  b0 t
print mygenerator
* u6 c, V8 a% }: A
+ N- ^! Z; H8 ~6 V: ~def createIterator() : + l& F2 h* V/ c  Z/ N" g  ]
    mylist = range(10)
* C2 C3 [) {# h' ^% \
* U0 t- l% p3 y: z    return iter([i * i for i in mylist])
& i5 |8 ~( s$ z  }4 z- s8 Q! h# Z: v4 ]9 l* {8 c: c% b& k# Y
myiterator = createIterator() 2 M0 A# p+ _& Q) I& x  a
print myiterator
* }7 K, j  [% E- Z  i0 e1 ?# e' v. A2 j2 e" f( h5 i

作者: 美人如花    时间: 2015-4-10 14:16

+ m( K+ x+ y  [3 r# a) ]- _$ ]; U+ ~

/ R  H' S: r6 y4 Z: @: E0 R
& D# P: }" h6 k' w* DCat_He 2015-04-07 20:38:08
* ~! B5 R  ]7 p# a
9 l& n2 b0 k+ c; l/ z# u  G4 f$ k# h7 a这样理解?=>生成器是一种懒惰的迭代器
4 \* k1 C2 P4 |: L! r
4 k4 X, j' F" g# o: t事实上,在Python3.x中许多原来在Python2.x中返回迭代器的地方都换成了返回生成器,更加优雅,安全,好用
' {! B( D' {4 c2 R
; W/ O" [/ L0 ?( f3 D' B* q* Z




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