Python中的生成器(generator)
生成器:
在函数内部包含yield关键字,那么该函数执行的结果就是生成器(生成器即是迭代器)
yield的功能:1.把函数的执行结果做成迭代器(帮函数封装好__iter__(),__next__()方法)
2.函数暂停与再继续进行的状态是由yield保存的
yield与return的比较?
相同点:都有返回值的功能
不同点:return只能返回一次值,而yield可以返回多次值
def f():
yield 5
print("ooo")
return
yield 6
print("ppp")
# if str(tem)=='None':
# print("ok")
f=f()
# print(f.__next__())
# print(f.__next__())
for i in f:
print(i)
'''
return即迭代结束
for不报错的原因是内部处理了迭代结束的这种情况
'''
1、自定义range:
# def my_range(start,stop,step=1):
# while start<stop:
# yield start
# start+=step
# g=my_range(1,5,2)
# print(next(g))
# print(next(g))
2、send的工作方式:
def f():
print("ok")
s=yield 7
print(s)
yield 8 f=f()
print(f.send(None))
print(next(f)) #print(f.send(None))等同于print(next(f)),执行流程:打印ok,yield7,当再next进来时:将None赋值给s,然后返回8,可以通过断点来观察
python的三元表达式+列表解析+生成器表达式
三元表达式:
# def max2(x,y):
# if x>y:
# return x
# else:
# return y
# x=10
# y=20
# res=x if x>y else y
# print(res)
列表解析:
l = ['egg%s'%i for i in range(10)]
print(l l = ['egg%s'%i for i in range(10) if i > 5]
print(l)
names = ['alex_sb','egon','wupeiqi_sb','yuanhao_sb']
names_new = [name for name in names if name.endswith('sb')]
print(names_new)
生成器表达式
g = ('egg%s'%i for i in range(10))##将中括号变成小括号即为生成器表达式
#迭代器同一时间在内存中只有一个值
print(g)
print(next(g))
print(next(g))
with open('db.txt',encoding = 'utf-8') as f:
g = (len(line) for line in f)
print(max(g))
Python中的生成器(generator)的更多相关文章
- python中的生成器函数是如何工作的?
以下内容基于python3.4 1. python中的普通函数是怎么运行的? 当一个python函数在执行时,它会在相应的python栈帧上运行,栈帧表示程序运行时函数调用栈中的某一帧.想要获得某个函 ...
- Python学习-39.Python中的生成器
先回顾列表解释 lista = range(10) listb = [elem * elem for elem in lista] 那么listb就将会是0至9的二次方. 现在有这么一个需求,需要存储 ...
- python中的生成器(二)
一. 剖析一下生成器对象 先看一个简单的例子,我们创建一个生成器函数,然后生成一个生成器对象 def gen(): print('start ..') for i in range(3): yield ...
- Day10 python高级特性-- 生成器 Generator
列表生成式可以创建列表,但是受内存限制,列表容量时有限的,创建一个巨量元素的列表,不仅占用很大的存储空间,当仅仅访问前几个元素时,后面的绝大多数元素占用的空间都被浪费了. 如果list的元素可以按照算 ...
- python中的生成器(generator)总结
1.实现generator的两种方式 python中的generator保存的是算法,真正需要计算出值的时候才会去往下计算出值.它是一种惰性计算(lazy evaluation). 要创建一个gene ...
- Python中的生成器与yield
对于python中的yield有些疑惑,然后在StackOverflow上看到了一篇回答,所以搬运过来了,英文好的直接看原文吧. 可迭代对象 当你创建一个列表的时候,你可以一个接一个地读取其中的项.一 ...
- 深入理解Python中的生成器
生成器(generator)概念 生成器不会把结果保存在一个系列中,而是保存生成器的状态,在每次进行迭代时返回一个值,直到遇到StopIteration异常结束. 生成器语法 生成器表达式: 通列表解 ...
- 聊聊Python中的生成器和迭代器
Python中有两个重要的概念,生成器和迭代器,这里详细记录一下. 1. 生成器 什么是生成器呢? 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包 ...
- python中的生成器(一)
我们先考虑一个场景: 有个情景需要循环输出1——10. 这里给两种方法: list1 = [1,2,3,4,5,6,7,8,9,10] for i in list1: print(i) for i i ...
- python学习之【第十三篇】:Python中的生成器
1.为什么要有生成器? 在Python中,通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅 ...
随机推荐
- CentOS7 下的 firewall 用法
1.firewalld的基本使用 启动: systemctl start firewalld 查看状态: systemctl status firewalld 停止: systemctl disab ...
- java.lang.UnsupportedClassVersionError: com/gargoylesoftware/htmlunit/WebClient : Unsupported major.minor version 52.0 (unable to load class com.gargoylesoftware.htmlunit.WebClient)
java.lang.UnsupportedClassVersionError: com/gargoylesoftware/htmlunit/WebClient : Unsupported major. ...
- 常用长度单位PX/EM/PT/百分比转换公式与对照表
PX.PT.EM.ex和in等都是我们常用的长度单位,尤其在网页的字体大小中经常用到.但是你知道PX.PT和EM之间是如何进行准换的吗?这里icech为大家找到了一个px.pt.em和percent大 ...
- GitHub and Git
book:https://git-scm.com/book/zh/v2 Git使用简易指南:https://www.bootcss.com/p/git-guide
- Oracle中查看所有的表,用户表,列名,主键,外键
在Oracle中查看所有的表: select * from tab/dba_tables/dba_objects/cat; 看用户建立的表 : select table_name from user_ ...
- Python 数据文件操作——写出数据
- linux 下批量在多文件中替换字符串
sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在目录` 注意:`` 符号在shell里面正式的名称叫做backquote , 一般叫做命令替换其作用 ...
- 合唱队形 ( 双向LIS )
#include <iostream> #include <stdio.h> #include <algorithm> using namespace std; ] ...
- DirectX11笔记(十二)--Direct3D渲染8--EFFECTS
原文:DirectX11笔记(十二)--Direct3D渲染8--EFFECTS 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010333737 ...
- Vue源码探究-虚拟DOM的渲染
Vue源码探究-虚拟DOM的渲染 在虚拟节点的实现一篇中,除了知道了 VNode 类的实现之外,还简要地整理了一下DOM渲染的路径.在这一篇中,主要来分析一下两条路径的具体实现代码. 按照创建 Vue ...