数学建模社区-数学中国
标题:
关于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; t
def 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. A
2 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* D
Cat_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