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中使用bidict模块双向字典结构的奇技淫巧
Jul 12 Python
浅谈django开发者模式中的autoreload是如何实现的
Aug 18 Python
对变量赋值的理解--Pyton中让两个值互换的实现方法
Nov 29 Python
python with提前退出遇到的坑与解决方案
Jan 05 Python
python验证码识别实例代码
Feb 03 Python
python selenium 弹出框处理的实现
Feb 26 Python
python实现小程序推送页面收录脚本
Apr 20 Python
pytorch随机采样操作SubsetRandomSampler()
Jul 07 Python
如何基于pandas读取csv后合并两个股票
Sep 25 Python
如何使用Python自动生成报表并以邮件发送
Oct 15 Python
Python爬虫分析微博热搜关键词的实现代码
Feb 22 Python
5行Python代码实现一键批量扣图
Jun 29 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
phpmyadmin的#1251问题
2006/11/25 PHP
php expects parameter 1 to be resource, array given 错误
2011/03/23 PHP
PHP 5.3新增魔术方法__invoke概述
2014/07/23 PHP
php实现的IMEI限制的短信验证码发送类
2015/05/05 PHP
Laravel日志用法详解
2016/10/09 PHP
Laravel 框架返回状态拦截代码
2019/10/18 PHP
jQuery 1.0.4 - New Wave Javascript(js源文件)
2007/01/15 Javascript
IE 上下滚动展示模仿Marquee机制
2009/12/20 Javascript
javascript 用原型继承来实现对象系统
2010/03/22 Javascript
javascript改变position值实现菜单滚动至顶部后固定
2013/01/18 Javascript
Jquery仿淘宝京东多条件筛选可自行结合ajax加载示例
2013/08/28 Javascript
JS获取各种浏览器窗口大小的方法
2014/01/14 Javascript
jquery动态分页效果堪比时光网
2014/09/25 Javascript
js树插件zTree获取所有选中节点数据的方法
2015/01/28 Javascript
js基础之DOM中元素对象的属性方法详解
2016/10/28 Javascript
vue 弹框产生的滚动穿透问题的解决
2018/09/21 Javascript
vue中el-upload上传图片到七牛的示例代码
2018/10/19 Javascript
Vue与React的区别和优势对比
2020/12/18 Vue.js
python实现哈希表
2014/02/07 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
2020/03/01 Python
python中如何进行连乘计算
2020/05/28 Python
使用Python构造hive insert语句说明
2020/06/06 Python
python如何停止递归
2020/09/09 Python
css3实现一款模仿iphone样式的注册表单
2013/03/20 HTML / CSS
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
洛杉矶健身中心女性专用运动服饰品牌:Marika
2018/05/09 全球购物
衰败城市英国官网:Urban Decay英国
2020/04/29 全球购物
讲解员培训方案
2014/05/04 职场文书
公司节能减排方案
2014/05/16 职场文书
全陪导游词
2015/02/04 职场文书
汽车4S店销售经理岗位职责
2015/04/02 职场文书
党校培训学习心得体会
2016/01/06 职场文书
2016党校学习心得体会
2016/01/07 职场文书
JS数组的常用方法整理
2021/03/31 Javascript
MySQL配置主从服务器(一主多从)
2021/08/07 MySQL
MySQL数据库中的锁、解锁以及删除事务
2022/05/06 MySQL