Python 基础第十三天(迭代器,生成器)

今日主要内容:

1.可迭代对象

2.迭代器

3.生成器

1.可迭代对象

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

查看__iter__方法:dir(对象)

可迭代对象就遵循可迭代协议。

接触过的可迭代对象有:str,list,tuple,dict,set,range

迭代器:f1文件句柄

如何判断

法一:

例:s = ‘laonanhai‘

print(‘__iter__‘ in dir(s))

法二:

例:l = [1, 2, 3, 4]
from collections import Iter

print(isinstance(l, Iterable))

返回结果:# True

2.迭代器

什么是迭代器

可迭代对象转化成迭代器:可迭代对象.__iter__()  --->迭代器

不仅含有__iter__方法,还要含有__next__方法

例:l1 = [1,2,3]

l1_obj = l1.__iter__()

print(‘__iter__‘ in  dir(l1_obj))  #True

print(‘__next__‘ in  dir(l1_obj)) #True

判断迭代器:

法一:

print(‘__iter__‘ in dir(l1_obj)) #判断是否是可迭代对象
print(‘__next__‘ in dir(l1_obj)) #判断是否为迭代器

法二:
from collections import Iterator 
print(isinstance(l1_obj, Iterator))

迭代器的好处:

1.节省内存空间,只有执行__next__函数,才会进行下一步,并加载到内存中.

2.满足惰性机器

3.不能反复取值,不可逆.

例:用while循环模拟for循环内部机制

思路:

‘‘‘

1.将可迭代对象转化成迭代器

2.内部使用__next__方法,取值

3.运用了异常处理去处理报错

‘‘‘

li = [1,2,3,4,5,6,7]

li_obj = li.__iter__()

while True:

  try:

    i = li_obj.__next__()

    printe(i)

  except  Exception:

    break

#  Exception 表示一切非代码错误

3.生成器

(1)

什么是生成器:生成器本质是迭代器,是特殊的迭代器.所以迭代器的有点它都具有.

(2)

生成器的产生方式:

1.生成器函数构造

2.生成器推导式构造

3.数据类型的转换

1.生成器函数构造

方法:

正常函数下面将return 变成yield,就可以将函数转变成生成器.

例:

def funcl():

  print(666)

  print(555)

  return 777

print(funcl())

def funcl1():

  print(666)

  print(555)

  yield 444

  yleld 777

g = funcl()

print(g)

结论:# <generator object func1 at 0x0000000001197888>

解析:

第一:函数中只要有yield 那他就不是一个函数,而是一个生成器

第二:g称作生成器对象

执行:

print(g.__next__())

print(g.__next__())

print(g.__next__()) #超出yield数量,报错

sent的作用

next 和send 功能一样,都是执行一次
send可以给上一个yield赋值

例:

def generator():
  print(123)
  content = yield 1
  print(content)
  print(456)
  yield 2
g = generator()
g.__next__()
g.send(‘hello‘)

原文地址:https://www.cnblogs.com/tom2ling/p/8710806.html

时间: 2024-11-10 14:55:25

Python 基础第十三天(迭代器,生成器)的相关文章

python学习第十三天 迭代器 生成器

1.函数复习总结 # 函数 -- 2天 # 函数的定义和调用 # def 函数名(形参): #函数体 #return 返回值 #调用 函数名(实参) # 站在形参的角度上 : 位置参数,*args,默认参数(陷阱),**kwargs # 站在实参的角度上 : 按照位置传,按照关键字传 # 返回值:没有返回值 返回一个值 返回多个值 # 接收返回值:没有返回值不接收,返回一个值用一个变量接收,返回多个值用一个变量或者对应数目的变量接收 # 闭包函数 -- 在内部函数引用外部函数的变量 # 装饰器函

Python基础(7)——迭代器&amp;生成器

1.列表生成式 1 [i*2 for i in range(10)] 2 [fun(i) for i in range(10)] 2.生成器 1 # Author Qian Chenglong 2 3 #列表生成器 4 a=(i*2 for i in range(10)) 5 #a[1]#只是将算法存储了,只有在调用时才会生成相应的数据,不能直接读取 6 a.__next__()#生成器只能一个一个往后取,且只存储当前值 7 8 #函数生成器 9 10 # def fib(max): 11 #

python基础之三大器中迭代器和生成器

迭代器 迭代对象: 在python中,但凡内部含有iter方法的对象,都是可迭代对象. **迭代器: 在python中,内部含有__Iter__方法并且含有__next__方法的对象就是迭代器.** 可迭代对象 str list set dic python中规定,只要具有__ iter__()方法就是可迭代对象 str.__iter__()# list.__iter__()# tuple.__iter__()# dict.__iter__()# set.__iter__() 将可迭代对象转换成

python学习第四节 迭代器 生成器 面向过程编程

1:什么是迭代 可以直接作用于for循环的对象统称为可迭代对象(Iterable). 可以被next()函数调用并不断返回下一个值的对象称为迭代器(Iterator). 所有的Iterable均可以通过内置函数iter()来转变为Iterator. 对迭代器来讲,有一个__next()就够了.在你使用for 和 in 语句时,程序就会自动调用即将被处理的对象的迭代器对象,然后使用它的next__()方法,直到监测到一个StopIteration异常. >>> L = [1,2,3]>

Python 基础 -2.4.3 迭代器

迭代器 = 循环 迭代器 我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的generator function. 这些可以直接作用于for循环的对象统称为可迭代对象:Iterable. 可以使用isinstance()判断一个对象是否是Iterable对象: >>> from collections import Iterable >>&

Python 全栈开发五 迭代器 生成器 装饰器

一.迭代器 迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 迭代器有两个基本的方法:iter() 和 next(). 字符串,列表或元组对象都可用于创建迭代器,生成迭代器的方法是iter(): >>li = [1,2,3,4,5] >>it = iter(li) #生成一个迭代器 >>it.__next__() 1 >>next(it) #以上两种next都可以使用 2 >

python基础-第十三篇-13.1web框架本质

基础与概念 众所周知,对于所有的web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端 web框架分两类:一类是包括socket和业务逻辑(tornado),另一类就是只负责业务逻辑 对于第二类,没有socket就要使用其他的服务器程序,比如wsgi,它负责封装客户的请求信息,我们只要按它提供的方法获取数据 首先我们明白了其本质就是socket,如果从socket开始开发应用程序那么效率就太低了,正确的做法是底层的socket处理代码由专门的服务器软件实现,

python 全栈 python基础 (十三)匿名函数 与 内置函数

一.匿名函数  1.定义: 匿名函数顾名思义就是指:是指一类无需定义标识符(函数名)的函数或子程序. 2.语法格式:lambda 参数:表达式 lambda语句中,开头先写关键字lambda,冒号前是参数,可以有多个,用逗号隔开:冒号右边的为表达式,需要注意的是只能有一个表达式.由于lambda返回的是函数对象(构建的是一个函数对象),所以需要定义一个变量去接收.  3.注意点:lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值.lambda 函数不能包含命令,包含

python基础13-迭代器和生成器

迭代器和生成器 凡是可以使用for循环取值的都是可迭代的可迭代协议: 内部含有__iter__方法的都是可迭代的迭代器协议 内部含有__iter方法和__next__方法的都是迭代器什么是迭代器 迭代器=iter(可迭代的).自带一个__next__方法 优势:节省内存\快 特性:惰性运算 常用的:列表\字典\元素\字符串\集合\range\文件句柄\enumeratepython 2和python3中的range区别 python2x种range不管range多少,会生成一个列表,这个列表将用