python基础-生成器
时间:2019-11-14
本文章向大家介绍python基础-生成器,主要包括python基础-生成器使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
生成器
概念:但凡在函数内部定义了一个yield,调用函数时,函数体代码不会执行,会返回一个结果,该结果就是生成器。本质上是迭代器,一个自定义的迭代器。
# python内获取迭代器的方式 def iter_func(): list1 = [1, 2, 3, 8, 4] # 获取一个迭代器 iter_list = list1.__iter__() while True: try: # 捕获异常 # 执行__next__取值 print(iter_list.__next__()) except StopIteration: break # 执行iter_func iter_func() # 自定义一个迭代器 def func(): print("hello world!") yield "dawn" res = func() # 直接调用,返回了一个生成器:<generator object func at 0x000002376172F1C8> print(res) # 如何获取生成器的内容呢? # 生成器的本质是迭代器,迭代器对象取值通过.__next__ # 通过__next__ 取值时,才会执行函数体代码。 print(res.__next__())
输出结果:
hello world! dawn
生成器如何实现:通过
yield
关键字实现。yield
只能在函数内部定义
每一次yield 都会往生成器传一个值。
可以保存函数的暂停状态
def yield_func(): print("自定义生成器开始……") print("第一个yield:") yield "yield--1" print("第二个yield:") yield "yield--2" print("第三个yield:") yield "yield--3" print("最后一个yield:") yield "yield--4" print("查看,是否还有yield") res = yield_func() print(res.__next__())
输出:
自定义生成器开始…… 第一个yield: yield--1
yield 和 return
- 相同点:返回值的个数无限制
- 不同点:return 有且只能返回一个值;yield 可返回多个值
# yield def yield_func(): list1 = [2, 3, 4, 1] dict1 = {"name": "dawn", "age": 18, "hobby": "read"} tuple1 = (1, 'a', 2, 'b') set1 = {23, 34, 'e'} yield list1 yield dict1 yield tuple1, set1 # return def return_func(): list1 = [2, 3, 4, 1] dict1 = {"name": "dawn", "age": 18, "hobby": "read"} tuple1 = (1, 'a', 2, 'b') set1 = {23, 34, 'e'} return list1,tuple1 #此处代码执行不到,函数代码题遇到return 以后就结束了 return dict1
使用yield 自定义一个range
""" python2:range(1,5) ---→ [1,2,3,4] python3:range(1,5) ---→ range对象 ---→ 生成器 ---→ 迭代器 range(start,stop,step) """ def my_range(start,end,step=1): while start < end: yield start start += move
原文地址:https://www.cnblogs.com/xiaodan1040/p/11857923.html
- HDUOJ-------(1022)Train Problem I
- NYOJ-----素数环
- HDUOJ-----(1329)Calling Extraterrestrial Intelligence Again
- 修改WordPress默认评论表情(附:跳转到多说评论框的方法)
- HDUOJ--------(1312)Red and Black
- HDUOJ---------(1045)Fire Net
- HDUOJ----(1175)连连看
- HDUOJ-----(1072)Nightmare(bfs)
- deque容器的运用一点一点积累
- HDUOJ----(1016)Prime Ring Problem
- WordPress获取文章浏览总数
- HDUOJ----Safecracker(1015)
- hduoj---Tempter of the Bone
- nyoj------------找球号(一)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 别再问我 Python 怎么识别数字验证码了!
- Python自动化办公 | 同事要我帮忙补写178份Word日报!别闹!
- Excel多区间判断,其实很简单
- 外观模式
- cp命令
- java基本数据类型及相互间的转换(转)
- 【java设计模式系列】1. 工厂方法模式(Factory Method)
- 为什么 Java 中 1000==1000 为 false ?
- 【java设计模式系列】2. 单例模式(Singleton)
- 跨域请求的解决方案
- 【排序】快速排序
- 因为BitMap,白白搭进去8台服务器...
- java所有的“锁”大总结,以后面试再也不怕遇到锁了
- 【Java8新特性】03 Stream流式数据处理
- 慎用JSON.stringify