生成器:

在函数内部包含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))
 

最新文章

  1. 借One-Class-SVM回顾SMO在SVM中的数学推导--记录毕业论文5
  2. MySQL时间段查询,无数据补0
  3. Python学习(14)模块二
  4. 在Visual Studio 2010中进行“项目重命名”的有效工具
  5. poj----(1470)Closest Common Ancestors(LCA)
  6. c# checked unchecked 关键字
  7. 实时数据采集传输软件LDM配置
  8. 浏览器以外的Javascript
  9. kafka相关应用
  10. PHP MySql数据库访问
  11. 组件-------(一)redis系列--安装部署redis+实现redis分布式缓存 java+Spring+redis
  12. Replication--进程无法在“xxxx”上执行“sp_replcmds”
  13. Myeclipse删除default包
  14. List集合数据太多进行分批,List的subList方法应用
  15. 86、flask之一些凌乱知识点
  16. BZOJ_1179_[Apio2009]Atm_tarjan+spfa
  17. 把项目中那些恶心的无处存储的大块数据都丢到FastDFS之快速搭建
  18. Spring的基础注解
  19. 笨办法39字典dict
  20. css 使元素居中

热门文章

  1. mybatis深入理解(二)-----Mybatis数据源与连接池
  2. Aspose Words、Excel导出等操作
  3. POSTMAN调试接口post对象
  4. day 56
  5. GitHub - firebase/php-jwt: PEAR package for JWT
  6. js面向对象开发基础
  7. Poj 2104区间第k大(归并树)
  8. LintCode刷题笔记-- Edit distance
  9. 【JZOJ5088】【GDOI2017第四轮模拟day2】最小边权和 排序+动态规划
  10. Linux下的权限管理