Python开发之路(四)

一、迭代器

什么是迭代器?

迭代器的定义:是一个重复的过程,每一次重复,都是基于上一次的结果而来。

迭代器的优点:节省内存

那么,迭代器如何使用呢?

例如:

l=['a','b','c','d']

count=0

while count < len(l):

    print(l[count])

    count+=1

你看,每一次的取值都是基于上一次的结果。

那如果数据类型是字典、集合、文件呢?我们还可以通过索引来取值吗?不能,那么这时候就需要用到迭代器了。

在此之前,我们先搞懂什么是可迭代对象iterator,凡是对象下有__iter__方法即对象.__iter__,该对象就是可迭代对象。所以,可迭代对象包括:字符串、列表、元祖、字典、集合、文件。

我们可以将要迭代的对象处理成迭代器:x.__iter__(),然后利用next一个个的取值。

但一个个按照next取值后,没有值会报错StopIteration,那么就可以按下面的方法取值:

while True:

    try:

        print(next(iter_x)

    except StpoIteration:

        break

总结:

什么是迭代器对象:

1.有__iter__,执行得到仍是迭代本身

2.有__next__

迭代器的优点:

1.提供了一种统一的不依赖于索引的迭代方式

2.迭代器本身,比起其他数据类型更省内存

迭代器的缺点:

1.一次性,只能往后走,不能回退,不如索引取值灵活

2.无法预知什么时候取值结束,即无法预知长度。


二、for循环的原理

for循环就是在用迭代器!!!

l=[1,2,3,4,5]

for item in l: # iter_l=l.__iter__()

    print(item)


三、生成器

什么是生成器?

生成器的定义:在函数内部包含yield关键字,那么该函数执行的结果就是是生成器


yield的功能:

1.把函数的结果做成迭代器,即将函数封装成___iter__,__next__

2.函数暂停与再继续运行的状态是由yield保存的


yield与return的比较:

相同:都有返回值的功能

不同:return只能返回一次值,而yield可以返回多次值


四、三元表达式

普通写法:

def foo():

    if x>3:

        return 1

    else:

        return 0

三元表达式写法:

1 if x>3 else 2


五、列表解析式

普通写法:

l= []

for i in rang(10):

    l.append('egg%s'%i)

print(l)

列表解析式写法:

l=['egg%s' %i for i in range(10)]

print(l)


六、生成器表达式

l=('egg%s' %i for i in range(10))

l就是生成器

激活取值next(l)



猜你喜欢

转载自blog.csdn.net/weixin_41689605/article/details/80266338