博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 中的重点来了 : 迭代器 生成器
阅读量:5108 次
发布时间:2019-06-13

本文共 1657 字,大约阅读时间需要 5 分钟。

可迭代的对象:带有__iter__方法的,就是迭代器。字符串,列表,元祖,字典,集合,文件,都是可迭代的

可迭代的对象使用了__iter__方法的,就是迭代器,带有__next__,__iter__方法。

l = [1,2,3,4,6]   # l被称为可迭代的对象l1 = l.__iter__()  # l1为迭代器l1.__iter__()     # 迭代器的两种方法l1.__next__

Python 中的for循环 就是用了迭代器的原理

 

生成器:

1.生成器函数:常规函数定义,但是,使用yield语句而不是return语句返回结果。yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执行

 

2.生成器表达式:类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表

生成器实例:

def func():    a = 1    b = 3    print('------')    yield a     print('******')    yield b     ret = func() # ret就是生成器 ,实质上就是迭代器print(next(ret))print(next(ret))

 **执行第三次他会报错

生成器的优点:如果读取大量的内容,那么用迭代器可以减少内存,惰性计算

生成器的应用send语句 加上装饰器 贼牛逼,计算每日平均利率

def wrapper(func):    def inner(*args,**kwargs):        ret = func(*args,**kwargs)        next(ret)        return ret    return inner@wrapperdef pjs():    total = 0    day = 0    ave = None    while True:        day_num = yield ave        total +=day_num        day += 1        ave = total / dayave = pjs()# next(ave)print(ave.send(10))print(ave.send(15))

yield from 语句

正常的情况下的生成器

list =[1,2,3,4,5,6,7,8,9]def func():    for i in  list:        yield iret = func()print(next(ret))print(next(ret))print(next(ret))print(next(ret))

yield from语句的生成器

def func():    yield from listret = func()print(next(ret))print(next(ret))

效果与上面产生的生成器是一样 的

 

列表推导式 与 生成器表达式

#alex 准备下十个蛋来报答egonfor i in range(1,11):    print('alex下的第%s个蛋!!!! 真厉害呀' % i)# 用列表推导式来表达:l = [i for i in range(1,11)]print(l)

 

生成器的表达是就是把列表推导式的中括号,变成小括号

#alex 准备下十个蛋来报答egonfor i in range(1,11):    print('alex下的第%s个蛋!!!! 真厉害呀' % i)# 用列表推导式来表达:l = (i for i in range(1,11))print(next(l))print(next(l))print(next(l))print(next(l))

完美

 

转载于:https://www.cnblogs.com/niehaidong111/p/7274415.html

你可能感兴趣的文章
在NT中直接访问物理内存
查看>>
Intel HEX 文件格式
查看>>
SIP服务器性能测试工具SIPp使用指导(转)
查看>>
php_扑克类
查看>>
回调没用,加上iframe提交表单
查看>>
(安卓)一般安卓开始界面 Loding 跳转 实例 ---亲测!
查看>>
Mysql 索引优化 - 1
查看>>
LeetCode(3) || Median of Two Sorted Arrays
查看>>
大话文本检测经典模型:EAST
查看>>
待整理
查看>>
一次动态sql查询订单数据的设计
查看>>
C# 类(10) 抽象类.
查看>>
Vue_(组件通讯)子组件向父组件传值
查看>>
jvm参数
查看>>
我对前端MVC的理解
查看>>
Silverlight实用窍门系列:19.Silverlight调用webservice上传多个文件【附带源码实例】...
查看>>
2016.3.31考试心得
查看>>
mmap和MappedByteBuffer
查看>>
Linux的基本操作
查看>>
转-求解最大连续子数组的算法
查看>>