Discuss / Python / day10--2022/4/14

day10--2022/4/14

Topic source

Promethues

#1 Created at ... [Delete] [Delete and Lock User]
##每日学习day10--2022/4/14
###迭代器
#可迭代对象(可用for循环的对象): 1.list tuple dict set str等几何数据类型。2.generator生成器,或者包含yield的生成器函数
from collections.abc import Iterable # Iterable 可迭代的对象
isinstance([],Iterable)   # True

#迭代器(Iterator):可以被next()函数调用并不断返回下一个值的对象。生成器一定是迭代器对象
from collections.abc import Iterator # Iterator 迭代器
print(isinstance([],Iterator))  #False,虽然是可迭代对象,但不是迭代器
print(isinstance((x for x in range(100)),Iterator)) #True
print(isinstance([x for x in range(100)],Iterator)) #显然列表生成式不是迭代器

#关于Iterator,可以代表一个无穷集合,不确定长度。而list等并不是不确定长度。
l = (x for x in range(100)) #所以生成器对象,并不是一个长度为100的数据类型
print(len(l))  # TypeError: object of type 'generator' has no len()

#小结:
#1.凡是可以for的,都是可迭代对象。Iterable
#2.凡是可以调用next()函数的,都是迭代器对象。Iterator。表示一个惰性计算的序列
#3.python的for循环本质,就是不断调用next()实现的
def ange_for(i):
    it = iter(i)  # iter(i) 根据i获得一个Iterator对象
    while True:
        try:
            x = next(it)
        except StopIteration:
            break

  • 1

Reply