生成器函数_yield_yield from_send
生成器函数
'''
yield类似于return 相同:
都返回出去一个值 不同:
yield每次返回时, 会记录当前执行的位置
等下次调用生成器, 会从该位置向下走 return 直接终止函数
''' # 2. 生成器函数
def mygen():
print('one')
yield 1 print('two')
yield 2 print('three')
yield 3 # 创建生成器对象
gen = mygen() # 使用next
res = next(gen) '''
首先初始化生成器, 返回一个生成器对象 第一次调用: 执行print('one'), yield返回1,
暂停记录当前位置 第二次调用: 执行print('two'), yield返回2,
暂停记录当前位置 第三次调用: 执行print('three'), yield返回3,
暂停记录当前位置, 此时生成器已经不能在返回数据, 再次调用就会报错 '''
生成器写斐波那契数列?
def fbnq(max_len):
a = 0
b = 1 i = 0
while i < max_len:
yield b
a, b = b, a + b
# yield a
i += 1 gen = fbnq(10)
for i in gen:
print(i)
send
'''
next和send的区别:
next: 只能取值
send: 能取本次yield的返回值,
也能给上次yield传入值. send注意点:
第一个send不能给yield传值, 默认写None
最后一个yield接收不到send的发送值
'''
def mygen():
print('start')
res = yield 1
print(res) # res是send第二次的传入值, yield把2返回给send
res = yield 2
print(res) res = yield 3
print(res) # 初始化生成器, 获得生成器对象
gen = mygen() # 第一次调用, send传入None
yield_res = gen.send(None)
yield_res = gen.send('send1')
yield_res = gen.send('send2')
# 此时生成器已经没有数据, 再次调用就会报错
# yield_res = gen.send('send3')
# send和next可以混合使用
gen = mygen()
yield_res = gen.send(None)
yield_res = next(gen)
yield_res = next(gen)
yield from
把可迭代对象变成一个迭代器返回
def mygen():
listvar = ["鼎泰亚", "李楠", "陈根基", "陈元勇"] yield from listvar gen = mygen() for i in gen:
print(i)
生成器函数_yield_yield from_send的更多相关文章
- ES6笔记(5)-- Generator生成器函数
系列文章 -- ES6笔记系列 接触过Ajax请求的会遇到过异步调用的问题,为了保证调用顺序的正确性,一般我们会在回调函数中调用,也有用到一些新的解决方案如Promise相关的技术. 在异步编程中,还 ...
- python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)
1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...
- ES6新特性之生成器函数 (generator function): function*
一.什么是生成器函数(generator function)? 生成器函数是ES6的新特性之一,它是一个在执行时能中途暂时退出,后面重新调用又能重新进入继续执行的一种函数. 并且在函数内定义的变量的所 ...
- Python 3 中生成器函数yield表达式的使用
生成器函数或生成器方法中包含了一个yield表达式.调用生成器函数时,会返回一个迭代子,值从迭代子中每次提取一个(通过调用其__next__()方法).每次调用__next__()时,生成器函数的yi ...
- es6 Generator生成器函数
生成器函数使用function*声明. 在生成器函数内部,有一种类似return的语法:关键字yield.二者的区别是,普通函数只可以return一次,而生成器函数可以yield多次(当然也可以只yi ...
- python迭代-如何使用生成器函数实现可迭代对象
如何使用生成器函数实现可迭代对象 问题举例: 实现一个可迭代对象的类,它能迭代出给定范围内 的所有素数: pn = PrimeNumbers(1, 30) for x in pn: print(x) ...
- Python_Mix*生成器,生成器函数,推导式,生成器表达式
生成器: 生成器的本质就是迭代器 生成器一般由生成器函数或者生成器表达式来创建,其实就是手写的迭代器 def func(): print('abc') yield 222 #由于函数中有了yield ...
- 生成器函数yield
先看一个栗子: # -*- coding:UTF-8 -*- __autor__ = 'zhouli' __date__ = '2018/12/6 21:08' # 生成器函数,函数里只要有yield ...
- python学习日记(生成器函数进阶)
迭代器和生成器的概念 迭代器 对于list.string.tuple.dict等这些容器对象,使用for循环遍历是很方便的.在后台for语句对容器对象调用iter()函数.iter()是python内 ...
随机推荐
- Spring - AOP简介与图示
[1]AOP (Aspect-Oriented Programming, 面向切面编程),是一种新的方法论, 是对传统 OOP(Object-Oriented Programming, 面向对象编程) ...
- HyperLogLog算法
项目在统计UV/PV时用到了Druid的Hyper hyperunique算法,书上介绍这种算法求出的UV/PV存在一定误差,因此需要了解下误差来自哪里. 实现去重功能,最简单的就是使用set记录集合 ...
- 使用sed在匹配行之后增加一行数据
需求:在原来大量的shell文件中,给出了错误信息打印,现在要求打印错误后直接退出脚本. if [ $? -eq 0 ];then echo_green "done!" else ...
- WEBBASE篇: 第十一篇, JavaScript知识6
JavaScript 知识6 一, String 对象 1,分隔字符串, 函数: split(seperator) 作用: 将字符串,通过seperator 拆分成一个数组: eg: var msg= ...
- Oracle数据库:ORA-54013错误解决办法
ORA-54013: 不允许对虚拟列执行 INSERT 操作 这是Oracle 11 的新特性 —— 虚拟列. 在以前的Oracle 版本,当我们需要使用表达式或者一些计算公式时,我们会创建数据库视图 ...
- Python全栈之路----常用模块----subprocess模块
我们经常需要通过Python去执行一条系统命令或脚本,系统的shell命令是独立于你的python进程之外的,每执行一条命令,就是发起一个新进程,通过python调用系统命令或脚本的模块在python ...
- Redis的使用原理
原理介绍 (1)什么是redis? Redis 是一个基于内存的高性能key-value数据库. (有空再补充,有理解错误或不足欢迎指正) (2)Reids的特点 Redis本质上是一个Key-Val ...
- ztree模糊筛选展开选中节点
树呢是一个最简单的树,并没有做一异步加载,也就是一个筛选,然后跳到第一个符合删选的数据下,并且所有符合的都会被展开和选中.其中ztreeAry是一个模拟的本地数组json.在test.json中,如果 ...
- 学习笔记CB006:依存句法、LTP、n元语法模型、N-最短路径分词法、由字构词分词法、图论、概率论
依存句法分析,法国语言学家L.Tesniere1959年提出.句法,句子规则,句子成分组织规则.依存句法,成分间依赖关系.依赖,没有A,B存在错误.语义,句子含义. 依存句法强调介词.助词划分作用,语 ...
- hibernate的lazy初始化结果
package com.ehcache; import java.io.Serializable; public class User implements Serializable{ private ...