生成器,迭代器。及表达式、推导式

本文详细介绍了Python中的迭代器和生成器的概念及其应用。包括如何判断可迭代对象与迭代器的区别,生成器的实现原理及优缺点,并通过实例演示了列表推导式和生成器表达式的使用。

1、迭代器

可迭代对象:内部含有__iter__方法的就是可迭代对象

可迭代对象不能取值,因为内部不含有__next__方法

可迭代对象--》迭代器  :obj.__iter__(),iter(obj)

迭代器:内部含有__iter,__next__方法的对象

迭代器的优点:1,节省内存

        2,惰性机制

        3,单向,不可逆

如何判断可迭代对象,迭代器?

1,有没有__iter__方法  dir()方法

2,isinstance(对象,lterable)方法

 l1 = [1, 2, 3]
 from collections import Iterable
 from collections import Iterator
print(isinstance(l1,Iterable))
 print(isinstance(l1,Iterator))
 print(isinstance(l1,list))

2、生成器

解释:自己用python代码写的迭代器就是生成器, 生成器的本身就是迭代器

函数中如果出现了yield,这个函数就是生成器函数

这个时候执行函数,获取到生成器。

使用__next__()执行到下一个yield,send()也有这个功能

区别:

__next__()方法不能赋值

send()可以赋值,在执行send()之前执行__next__()

生成器的优点:

节省内存。

 

列表推导式:

优点:节省代码,一行搞定 缺点:不好排错。

注:凡是用列表推导式构造的列表对象,用其他方式都可构建.,非常复杂的列表,列表推导式是构建不出的,

循环模式:  [变量(加工后的变量) for  变量 in  iterable]

列如:l2 = [i for i in range(1, 14)]

筛选模式:  [变量(加工后的变量) for 变量 in iterable if 条件] 

列如:l1 = [i for i in range(1, 31) if i % 3 == 0]

 

生成器表达式

循环模式   g_obj = ('python%s期' % i for i in range(1,14)) 
筛选模式   g_obj1 = ('python%s期' % i for i in range(1,14) if i % 2 == 0)

取数:print(g_obj.__next__())

或者:

  for i in g_obj1:
      print(i)

 

转载于:https://www.cnblogs.com/duanhaoxin/p/9203920.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值