Python字典生成式、集合生成式、生成器用法实例分析


Posted in Python onJanuary 07, 2020

本文实例讲述了Python字典生成式、集合生成式、生成器用法。分享给大家供大家参考,具体如下:

字典生成式:

  • 跟列表生成式一样,字典生成式用来快速生成字典,不同的是,字典需要两个值
#d = {key: value for (key, value) in iterable}
d1 = {'x': 1, 'y': 2, 'z': 3}
d2 = {k: v for (k, v) in d1.items()}
print(d2)

集合生成式:

  • 集合生成式格式和列表生成式类似,不过用的是大括号:
s1={x for x in range(10)}
print(s1)

生成器:

  • 生成器是一种迭代过程才生成对应元素的可迭代对象
  • 生成器的元素在访问前不会生成,只有当访问时才会生成,如果继续向后访问,那么当前的元素会销毁。
  • 生成器的一种生成方式是将列表生成式改为小括号包裹:
print("-----使用()列表生成式生成generator------")
g=(x*x for x in range(10))
print(type(g),g)
print(next(g),next(g),next(g))
  • 生成器本质上是一个函数
  • 当一个生成器被调用时,它返回一个生成器对象,而不用执行该函数。 当第一次调用 next()方法时,函数向下执行,如果遇到yield则返回 yield 后面的值。 再次调用next()方法时,函数从上次结束的位置继续向下执行,如果遇到yield则返回 yield 后面的值。
  • 可以使用yield来定义一个生成器:
print("\n----使用yield生成generator-------")
def ge():
  print("第一次yield")
  yield 1
  print("第二次yield")
  yield 2
  print("第三次yield")
  yield 3
o = ge()
print(next(o))
print(next(o))
print(next(o))
运行结果:
----使用yield生成generator-------
第一次yield
1
第二次yield
2
第三次yield
3
  • 生成器本质上是一个函数,如果想要获取这个函数的返回值,我们需要使用异常捕获来获取这个返回值:
def fib(max):
  n,a,b = 0,0,1
  while n <max:
    yield b
    a,b =b,a+b
    n = n+1
  return 'done'

print("\n-----尝试获得函数返回值------")
gg=fib(6)
while True:
  try:
    x=next(gg)
    print("g:",x)
  except StopIteration as e:
    print('返回值等于:',e.value)
    break
  • 既可以使用next()来迭代生成器,也可以使用for来迭代:
def ge():
  print("第一次yield")
  yield 1
  print("第二次yield")
  yield 2
  print("第三次yield")
  yield 3
o = ge()

print("\n---迭代generator的方法--------")
for x in o:
  print(x)#相当于进入到generator函数中,执行下去并得到返回值
结果:
---迭代generator的方法--------
第一次yield
1
第二次yield
2
第三次yield
3
  • 由于生成器的特性,可以进行”协程“操作:后续补充

更多关于Python相关内容可查看本站专题:《Python列表(list)操作技巧总结》、《Python字符串操作技巧汇总》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python 多核并行计算的示例代码
Nov 07 Python
python中列表和元组的区别
Dec 18 Python
python 中的list和array的不同之处及转换问题
Mar 13 Python
python 对txt中每行内容进行批量替换的方法
Jul 11 Python
Python对CSV、Excel、txt、dat文件的处理
Sep 18 Python
python学生信息管理系统(初级版)
Oct 17 Python
Python 面试中 8 个必考问题
Nov 16 Python
Python OpenCV利用笔记本摄像头实现人脸检测
Aug 20 Python
Python 3 实现定义跨模块的全局变量和使用教程
Jul 07 Python
python实现双色球随机选号
Jan 01 Python
使用Python制作新型冠状病毒实时疫情图
Jan 28 Python
python如何代码集体右移
Jul 20 Python
linux环境下安装python虚拟环境及注意事项
Jan 07 #Python
Python包,__init__.py功能与用法分析
Jan 07 #Python
Python3实现发送邮件和发送短信验证码功能
Jan 07 #Python
Python模块的定义,模块的导入,__name__用法实例分析
Jan 07 #Python
python 微信好友特征数据分析及可视化
Jan 07 #Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
Jan 07 #Python
Python装饰器原理与基本用法分析
Jan 07 #Python
You might like
php中\r \r\n \t的区别示例介绍
2014/02/08 PHP
php面象对象数据库操作类实例
2014/12/02 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
2016/08/29 PHP
js实现俄罗斯方块小游戏分享
2014/01/31 Javascript
JavaScript中的getTimezoneOffset()方法使用详解
2015/06/10 Javascript
jQuery实现连续动画效果实例分析
2015/10/09 Javascript
JavaScript模版引擎的基本实现方法浅析
2016/02/15 Javascript
JS简单循环遍历json数组的方法
2016/04/22 Javascript
AngularJS基础 ng-list 指令详解及示例代码
2016/08/02 Javascript
JavaScript中原型链存在的问题解析
2016/09/25 Javascript
Bootstrap列表组学习使用
2017/02/09 Javascript
JS简单判断滚动条的滚动方向实现方法
2017/04/28 Javascript
基于构造函数的五种继承方法小结
2017/07/27 Javascript
让bootstrap的carousel支持滑动滚屏的实现代码
2017/11/27 Javascript
mongoose更新对象的两种方法示例比较
2017/12/19 Javascript
浅谈如何通过node.js对数据进行MD5加密
2018/05/16 Javascript
vue2.0 实现导航守卫(路由守卫)
2018/05/21 Javascript
详解Element 指令clickoutside源码分析
2019/02/15 Javascript
layUI的验证码功能及校验实例
2019/10/25 Javascript
ES6 proxy和reflect的使用方法与应用实例分析
2020/02/15 Javascript
mpvue网易云短信接口实现小程序短信登录的示例代码
2020/04/03 Javascript
Json实现传值到后台代码实例
2020/06/30 Javascript
Python实现以时间换空间的缓存替换算法
2016/02/19 Python
基于python socketserver框架全面解析
2017/09/21 Python
Python简单实现控制电脑的方法
2018/01/22 Python
对Python中DataFrame按照行遍历的方法
2018/04/08 Python
python实现windows下文件备份脚本
2018/05/27 Python
Python中Numpy包的安装与使用方法简明教程
2018/07/03 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
2020/02/27 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
2020/06/09 Python
python在linux环境下安装skimage的示例代码
2020/10/14 Python
酒店办公室文员岗位职责
2013/12/18 职场文书
乡镇机关党员民主评议表自我评价
2014/09/21 职场文书
圣贤教育改变命运观后感
2015/06/16 职场文书
浅谈Redis的几个过期策略
2021/05/27 Redis
vue中利用mqtt服务端实现即时通讯的步骤记录
2021/07/01 Vue.js