iter 和生成器

# 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------------------


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值