# coding=utf-8_
print '--------------begin-Iterable------------------'
# 可迭代对象:Iterable 可以直接作用于for循环
# list、tuple、dict、set、str
from collections import Iterable
print isinstance([], Iterable)
print isinstance({}, Iterable)
print isinstance('', Iterable)
print isinstance((), Iterable)
print isinstance((x for x in range(10)), Iterable)
print isinstance(1, Iterable)
print '--------------end-Iterable------------------'
print '--------------begin-Iterator------------------'
# Iterator:可以被next()函数调用并不断返回下一个值的对象称为迭代器
# Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算
from collections import Iterator
print isinstance([], Iterator)
print isinstance({}, Iterator)
print isinstance('', Iterator)
print isinstance((), Iterator)
print isinstance((x for x in range(10)), Iterator)
print isinstance(1, Iterator)
print '--------------end-Iterator------------------'
print '--------------begin-iter------------------'
print isinstance(iter([]), Iterator)
print isinstance(iter({}), Iterator)
print isinstance(iter(''), Iterator)
print isinstance(iter(()), Iterator)
print isinstance((x for x in range(10)), Iterator)
print '--------------end-iter------------------'
print '--------------begin-MyIter1------------------'
class MyIter1(object):
def __init__(self):
pass
t = MyIter1()
print isinstance(t, Iterable)
print isinstance(t, Iterator)
print '--------------end-MyIter1------------------'
print '--------------begin-MyIter2------------------'
class MyIter2(object):
count = 0
def __init__(self):
pass
def __iter__(self):
return self.count
t = MyIter2()
print isinstance(t, Iterable)
print isinstance(t, Iterator)
print '--------------end-MyIter2------------------'
print '--------------begin-MyIter3------------------'
class MyIter3(object):
count = 0
def __init__(self):
pass
def next(self):
return self.count
t = MyIter3()
print isinstance(t, Iterable)
print isinstance(t, Iterator)
print '--------------end-MyIter3------------------'
print '--------------begin-MyIter4------------------'
class MyIter4(object):
count = 0
def __init__(self):
pass
def __iter__(self):
return self
def next(self):
if self.count < 10:
self.count = self.count + 1
return self.count
raise StopIteration();
t = MyIter4()
print isinstance(t, Iterable)
print isinstance(t, Iterator)
print t.next()
print t.next()
print '--------------slip------------------'
for x in MyIter4():
print x
print '--------------end-MyIter4------------------'
print '--------------next------------------'
i = iter('abcd')
print i.next()
print i.next()
print i.next()
s = {'one': 1, 'two': 2, 'three': 3}
print s
m = iter(s)
print m.next()
print m.next()
print '--------------生成器------------------'
L = [x * x for x in range(10)]
print L
g = (x * x for x in range(10)) # 要把一个列表生成式的[]改成(),就创建了一个generator
print g
print next(g)
print next(g)
print '--------------1------------------'
def myPrint(max):
i = 0
while (i < max):
print i
i = i + 1
yield "i = %s" % i
f = myPrint(5)
print next(f)
print next(f)
print '--------------end------------------'
输出:
--------------begin-Iterable------------------
True
True
True
True
True
False
--------------end-Iterable------------------
--------------begin-Iterator------------------
False
False
False
False
True
False
--------------end-Iterator------------------
--------------begin-iter------------------
True
True
True
True
True
--------------end-iter------------------
--------------begin-MyIter1------------------
False
False
--------------end-MyIter1------------------
--------------begin-MyIter2------------------
True
False
--------------end-MyIter2------------------
--------------begin-MyIter3------------------
False
False
--------------end-MyIter3------------------
--------------begin-MyIter4------------------
True
True
1
2
--------------slip------------------
1
2
3
4
5
6
7
8
9
10
--------------end-MyIter4------------------
--------------next------------------
a
b
c
{'three': 3, 'two': 2, 'one': 1}
three
two
--------------生成器------------------
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
<generator object <genexpr> at 0x00000000025CFDC8>
0
1
--------------1------------------
0
i = 1
1
i = 2
--------------end------------------