python函数五(迭代器,生成器)

一。迭代器

1.可迭代对象(只含有__iter__方法的数据是可迭代对象)

常见的可迭代对象:str list tuple dict set range

1.1什么是可迭代对象?

方法一: dir(被测对象) 如果 他含有‘__iter__ ‘,那这个对象就叫做可迭代对象.
遵循可迭代协议

s = ‘alex‘
l = [1,2,3,4,5]
print(‘__iter__‘ in dir(s))
print(‘__iter__‘ in dir(l))
# 输出结果:
# True
# True

2.迭代器(含有__iter__方法,并且含有__next__方法的数据是迭代器)

常见的迭代器:文件句柄

2.1迭代器的取值

s = ‘alex‘
l = [1,2,3,4,5]
s1 = s.__iter__()
print(s1.__next__())
print(s1.__next__())
print(s1.__next__())
# 输出结果: a   l   e

2.2迭代器的意义:
1)迭代器节省内存.
2)迭代器惰性机制.
3)迭代器不能反复,一直向下执行.

for循环的机制就是完美的运用的迭代器
内部含有__iter__方法,他会将可迭代对象先转化成迭代器。然后在调用__next__方法,他有异常处理的方法.

3.可迭代对象与迭代器的关系

1)可迭代对象------>迭代器
可迭代对象.__iter__()------->迭代器

s = ‘alex‘
l = [1,2,3,4,5]
l1 = l.__iter__()     #迭代器
print(l1)   #iterator  遵循迭代器协议
# 输出结果:<list_iterator object at 0x00000156B0EC7630>

判断是可迭代对象还是迭代器

方法二(isinstance与type类似,但是功能比type更强大)

l = [1,2,3,4,5]
l_iter = l.__iter__()
from collections import Iterable
from collections import Iterator
print(isinstance(l,Iterable))               #True
print(isinstance(l,Iterator))               #True
print(isinstance(l_iter,Iterator))        #False
print(isinstance(l,list))                      #True

二。生成器

生成器的本质就是迭代器,生成器是自己用python代码写的迭代器.
1,可以用生成器函数
2,可以用各种推导式构建迭代器.
3,可以通过数据转化.

def gener():
    print(111)
    yield 222
    count = yield 333
    print(count)
    yield 444
    yield 555
g = gener()
print(g)
print(g.__next__())
print(g.__next__())
print(g.send(‘aaa‘))
print(g.__next__())
# 输出结果:
# <generator object gener at 0x0000014CDE5B1BF8>
# 111
# 222
# 333
# aaa
# 444
# 555

4.send
1)send 和next功能一样
2)给上一个yiled 整体发送一个值
send不能给最后一个yield发送值
获取第一个值的时候,不能用send 只能用next

    

原文地址:https://www.cnblogs.com/zhuzhaoyang/p/8422991.html

时间: 2024-10-09 23:55:11

python函数五(迭代器,生成器)的相关文章

python函数:迭代器和生成器

python函数:迭代器和生成器 迭代器和生成器是函数中的一大重点,务必掌握,何为迭代?何为迭代器? 预习: 处理文件,用户指定要查找的文件和内容,将文件中包含要查找内容的每一行都输出到屏幕(使用生成器) 一.迭代器 for i in 50:     print(i) #运行结果: # Traceback (most recent call last): #   File "G:/python/python代码/八月/day2 迭代器生成器/3迭代器.py", line 8, in &

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

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

Python 函数对象、生成器 、装饰器、迭代器、闭包函数

一.函数对象 正确理解 Python函数,能够帮助我们更好地理解 Python 装饰器.匿名函数(lambda).函数式编程等高阶技术. 函数(Function)作为程序语言中不可或缺的一部分,太稀松平常了.但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性.那到底什么是第一类对象(First-Class Object)呢? 在 Python 中万物皆为对象,函数作为第一类对象有如下特性: #函数身为一个对象,拥有对象模型的三个通用属性:id(内存地址

闭包函数与迭代器生成器

闭包函数 闭包函数定义 必须是函数内嵌函数 内嵌函数必须引用外函数的变量 外函数返回内嵌函数的函数名 def otter(): name = 'Gredae' def inner(): # 外层函数包了个内层函数 print(name) # 内层函数引用了外层函数的变量 return inner # 外层函数返回内层函数的函数名 f = otter() # 用f变量来接收inner函数的地址 f() # 实际上是调用inner()函数 闭包函数的作用 可以使用函数闭包来实现一个函数的装饰器 函数

Python函数-4 迭代器

迭代器 在介绍迭代器之前,先说明下迭代的概念: 迭代:通过for循环遍历对象的每一个元素的过程. Python的for语法功能非常强大,可以遍历任何可迭代的对象. 在Python中,list/tuple/string/dict/set/bytes都是可以迭代的数据类型. 可以通过collections模块的Iterable类型来判断一个对象是否可迭代: from collections import Iterable isinstance('abc', Iterable) # str是否可迭代

Learn Python—函数(迭代器、生成器)

迭代器iterator 可迭代协议-只要含有__iter__方法的,都是可迭代的iterable 迭代器协议-内部含有__next__方法和__iter__方法的就是迭代器 只要能被for循环的数据类型,就一定拥有__iter__方法,for循环其实就是在使用迭代器 只要是迭代器就一定可以迭代 可迭代对象.__iter__() == 迭代器 迭代器中的__next__()方法可以一个一个的获取值 迭代器对象可以使用常规for语句进行遍历: list=[1,2,3,4] it = iter(lis

python函数递归和生成器

一.什么是递归 如果函数包含了对其自身的调用,该函数就是递归的.递归做为一种算法在程序设计语言中广泛应用,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量.例如,要计算1-9的9位数字的乘积,直观的算法是1*2*3*4*5*6*7*8*9,如果要计算1-10000的乘积,直观的算法就难于实现出,而递归就可以很简单的实现.请看示例: 1 def fact(n):#计算给定数字到一的乘积

python函数六(生成器,内置函数)

一.生成器 生成器三种方式: 1)生成器函数 2)数据转化 def gener(): print(111) yield 222 print(333) count = yield 444 print(count) print(555) yield 666 g = gener() print(g) # print(list(g)) print(g.__next__()) print(g.__next__()) print(g.send('asd')) print(list(g)) # 输出结果: #

python——函数 19、生成器(一)

一.什么是生成器? 答:当函数体内有yield的关键字时就叫做生成器 def foo(): print('a') yield 1 print('b') yield 2 print('c') yield 3 x=foo() print(x.__next__()) print(x.__next__()) 可以看出 1.生成器就是迭代器 2.yield与return一样 都是返回值 (区别?向下继续看) 既然生成器就是迭代器 那就可以用for循环来实现一下这个 def foo(): print('a'