生成器函数_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内 ...
随机推荐
- react native原生模块引用本地jar包
比如module目录结构是这样的: 然后libs中的目录是这样的: 只要在build.gradle中加入这段代码就行了 sourceSets { main { manifest.srcFile 'An ...
- jQuery-3.事件篇---事件绑定与解绑
on()的多事件绑定 之前学的鼠标事件,表单事件与键盘事件都有个特点,就是直接给元素绑定一个处理函数,所有这类事件都是属于快捷处理.翻开源码其实可以看到,所有的快捷事件在底层的处理都是通过一个&quo ...
- 配置两个Hadoop集群Kerberos认证跨域互信
两个Hadoop集群开启Kerberos验证后,集群间不能够相互访问,需要实现Kerberos之间的互信,使用Hadoop集群A的客户端访问Hadoop集群B的服务(实质上是使用Kerberos Re ...
- 局部变量,全局变量初始值问题----C与指针练习题4.14.1
全局变量初始化0 局部变量初始化是随机值 如下面一段代码,全局变量,将src复制n个字符到dst #include<stdio.h> void copy_n(char dst[],char ...
- pycrypto安装各种方法试了,最后这种最快速最方便
需要安装vs,然后按照如下步骤 这个不是在cmd中执行 而是在vs的命令行中执行
- python利用requests和threading模块,实现多线程爬取电影天堂最新电影信息。
利用爬到的数据,基于Django搭建的一个最新电影信息网站: n1celll.xyz (用的花生壳动态域名解析,服务器在自己的电脑上,纯属自娱自乐哈.) 今天想利用所学知识来爬取电影天堂所有最新电影 ...
- selenium环境搭建-python自动化脚本测试
站在朋友的肩膀上学习!!! 前提:python环境已经搭建完成 1.安装selenium 命令行输入“pip install selenium"一键式安装 2.检查Selenium是否安装成 ...
- android app内部更新适配到8.0
app 内部跟新是app中必须要有的功能,在app出现改变时,app内部更新能以最快的速度将应用提升到最新版本. 步骤: 1.获取本地app的版本号 int versionCode = 0; try ...
- 前端代理----whistle
场景一:如何将本地的请求代理到服务器上(如果接口没有校验登陆的情况) 最简单的方法:在项目文件中找到webpack开发环境的配置文件,配置devServer对象 devServer: { conten ...
- classic code review
package dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSe ...