数学建模社区-数学中国

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

作者: 爱是你我    时间: 2015-4-10 14:10
标题: 关于Python的生成器和迭代器
Python的生成器语法,会返回一个生成器对象,而用iter()函数,也能返回一个带有next()方法的可迭代对象,这样的话··按照我下面的写法,2者会有什么区别吗?如果一样,那生成器岂不是没用了?(所以·····)
6 }: Q5 |8 \+ h& ]1 d
1 w& Y. j$ z3 @) Jdef createGenerator() : 0 v; p- @/ Q8 |% y2 o- t7 X
    mylist = range(10) ( C" X3 u" A/ V+ r
, ^6 {# c$ s# k! u1 o( g5 {
    for i in mylist :
& u! ?/ }! ~: y# a' c- M! j        yield i*i
  y- c7 I# x: Q; B, }+ }+ }" z* [6 k5 O2 p$ d
mygenerator = createGenerator() # create a generator
' _/ ~5 |& k$ J/ \- I9 \% gprint mygenerator : H+ k/ \% C# |( |6 e- ?( l4 _& @: [
8 y/ C9 `7 q! H
def createIterator() :
4 f) Y/ q( T# z- B6 c) J( j    mylist = range(10) 9 f+ Y/ [, T2 d; ]5 G4 j8 Q

% r: b, f7 w, K& l2 v- h# V    return iter([i * i for i in mylist]) 1 J+ U7 X2 P3 C8 W
& L+ s, @( c+ r+ P& C
myiterator = createIterator()
% c4 Y1 }5 H# y7 d* p/ ]print myiterator ! S, ^% I; g# h1 X! p, s" X) P5 M

) c% h  o1 y& s4 G( C
作者: 美人如花    时间: 2015-4-10 14:16

; y) N8 B0 \% R( ?/ x; s4 n+ [4 K8 O; _
* ^0 ^8 m4 a, ~$ P9 I! ?0 o

& }6 R' F+ u" D; Q8 q, A- E) [Cat_He 2015-04-07 20:38:08 . e8 f, l8 ?& _$ |& x* C1 u3 Y

8 ^% p0 g- O' V& X& _) i这样理解?=>生成器是一种懒惰的迭代器
! P, ~# q9 K0 v. E6 ~8 U! B" U: q0 {0 k% f& S5 R9 a
事实上,在Python3.x中许多原来在Python2.x中返回迭代器的地方都换成了返回生成器,更加优雅,安全,好用
: f1 w. s  S! W- Y' I" }! K# |0 C: m% U8 h9 D8 w





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