数学建模社区-数学中国
标题:
关于Python的生成器和迭代器
[打印本页]
作者:
爱是你我
时间:
2015-4-10 14:10
标题:
关于Python的生成器和迭代器
Python的生成器语法,会返回一个生成器对象,而用iter()函数,也能返回一个带有next()方法的可迭代对象,这样的话··按照我下面的写法,2者会有什么区别吗?如果一样,那生成器岂不是没用了?(所以·····)
6 }: Q5 |8 \+ h& ]1 d
1 w& Y. j$ z3 @) J
def 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 \% g
print 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