13 迭代器和⽣成器
一.迭代器
1.以通过dir函数来查看类中定义好的所有⽅法
2.__iter__ 用来获取当前对象的迭代器
3.__next__ 获取可迭代对象的元素
s="我爱吃火锅"
ret=dir(s) # 查看字符串s中定义好的所有方法
print(ret)
it=s.__iter__() # 用来获取当前对象的迭代器
print(it.__next__()) # 获取可迭代对象的元素 第一个
print(it.__next__())
print(it.__next__())
print(it.__next__())
print(it.__next__()) # 最后一个元素后.继续__next__会报错 stop iteration def func(): #一次把可迭代对象元素循环遍历出来
lst = []
for i in range(0, 10000):
lst.append("服装"+str(i))
return lst
print(func()) def func():
for i in range(0,10000):
yield "服装"+str(i)
gen=func()
for i in range(0,65): # 分批次按需求来拿元素
ret=gen.__next__()
print(ret)
二.生成器
1.什么是生成器 ⽣成器实质就是迭代器
2.在python中有三种⽅式来获取⽣成器:
(1)通过生成器函数
def func():
print((111))
yield "222"
gen=func() # 如果函数中有yield,则此函数为生成器函数
ret=gen.__next__() # 生成器实质是迭代器,可直接执行__next__()
print(ret)
(2)yield 和return 的区别.
# 程序中有yield ,函数是生成器函数,访问生成器函数,函数不会执行,返回一个生成器.
# 生成器执行__next__,执行到下一个yield.
# yield 和return 基本相同,只是yield只负责返回,不会结束函数
# return 结束函数
(3) 生成器的作用 : 节省内存
(4) send 和 yield 的区别:send 给上一个yield位置传递一个值进去.但是__next__不能. 不能给最后⼀个yield发送值
(5) send() 第一次必须用__next__ (因为上面没有yield了.
def func():
print("想吃饭了")
a=yield "想吃麻辣烫"
print("想吃"+a)
b=yield "还想吃什么"
print("想吃"+b)
c=yield "呷哺呷哺"
print(c)
gen=func()
ret=gen.__next__()
print(ret)
ret1=gen.send("麻辣小龙虾")
print(ret1)
ret2=gen.send("海底捞")
print(ret2)

最新文章

  1. Entity Framework Code First数据库自动更新
  2. Java 操作Excel 之Poi(第一讲)
  3. 【Stage3D学习笔记续】真正的3D世界(一):透视矩阵
  4. 搜索打表大找规律 (hdu2045)
  5. 实现JSON数据的存储和读取
  6. cocos2dx 3.1从零学习(六)——CocosStudio(VS2013project导入及环境设置)
  7. 很傻很二很简单的一个问题,json键值为变量如何取值
  8. Machine Learning|Andrew Ng|Coursera 吴恩达机器学习笔记
  9. 2017-2018-1 1623 bug终结者 冲刺002
  10. android 广播,manifest.xml注册,代码编写
  11. Hive篇--相关概念和使用二
  12. Django Rest framework基础使用之View:APIView, mixins, generic, viewsets
  13. Js中this机制全解
  14. mybatis调用oracle存储过程 out游标类型参数 如何赋给java map
  15. 效率类APP原型制作分享----Timeglass
  16. mybatis xml mapper 文件中 if-else 写法
  17. 爬虫框架:scrapy
  18. 用eclipse来运行带参数的命令行程序,配置命令行程序的参数
  19. zookeeper程序员指南
  20. Find Min In Rotated Sorted Array2,包含重复数字的反转序列找最小值。

热门文章

  1. CSS 小技巧(不定时更新)
  2. go微服务框架go-micro深度学习(五) stream 调用过程详解
  3. mysql alter 添加索引
  4. Python之基础练习代码
  5. LNAMP服务器环境(源码安装)
  6. Linux下通过 rm -f 删除大量文件时报错:Argument list too long
  7. Metadata GC Threshold导致的full gc分析
  8. 使用DotfuscatorPro_4.9对软件dll库进行加密
  9. Mac 开发必备 利器 iterm2 oh-my-zsh
  10. 【C#】读取Excel中嵌套的Json对象,Json带斜杠的问题(其一)