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线程的两种编程方式
Apr 14 Python
深入讲解Python中面向对象编程的相关知识
May 25 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
Dec 08 Python
python kmeans聚类简单介绍和实现代码
Feb 23 Python
基于Python List的赋值方法
Jun 23 Python
flask session组件的使用示例
Dec 25 Python
使用python3构建文件传输的方法
Feb 13 Python
pymysql的简单封装代码实例
Jan 08 Python
Python函数参数定义及传递方式解析
Jun 10 Python
基于python实现可视化生成二维码工具
Jul 08 Python
Pycharm中使用git进行合作开发的教程详解
Nov 17 Python
利用Python将list列表写入文件并读取的方法汇总
Mar 25 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中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
2012/01/16 PHP
ubuntu10.04配置 nginx+php-fpm模式的详解
2013/06/03 PHP
非常好的js代码
2006/06/27 Javascript
ImageFlow可鼠标控制图片滚动
2008/01/30 Javascript
JQuery 初体验(建议学习jquery)
2009/04/25 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
2013/08/19 Javascript
JavaScript判断密码强度(自写代码)
2013/09/06 Javascript
使用javascript实现雪花飘落的效果
2015/01/13 Javascript
js+jquery常用知识点汇总
2015/03/03 Javascript
四种参数传递的形式——URL,超链接,js,form表单
2015/07/24 Javascript
jQuery EasyUI 布局之动态添加tabs标签页
2015/11/18 Javascript
JavaScript原生xmlHttp与jquery的ajax方法json数据格式实例
2015/12/04 Javascript
使用jQuery Rotare实现微信大转盘抽奖功能
2016/06/20 Javascript
jquery实现拖动效果(代码分享)
2017/01/25 Javascript
解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题
2017/03/09 Javascript
微信小程序实现动态改变view标签宽度和高度的方法【附demo源码下载】
2017/12/05 Javascript
vuejs router history 配置到iis的方法
2018/09/20 Javascript
Vue-Quill-Editor富文本编辑器的使用教程
2018/09/21 Javascript
Jquery的Ajax技术使用方法
2019/01/21 jQuery
使用element-ui table expand展开行实现手风琴效果
2019/03/15 Javascript
小程序如何获取多个formId实现详解
2019/09/20 Javascript
js实现淘宝首页的banner栏效果
2019/11/26 Javascript
Node.js 中如何收集和解析命令行参数
2021/01/08 Javascript
[00:43]2016完美“圣”典风云人物:单车宣传片
2016/12/02 DOTA
Python下载网络文本数据到本地内存的四种实现方法示例
2018/02/05 Python
基于Python 装饰器装饰类中的方法实例
2018/04/21 Python
Python sys模块常用方法解析
2020/02/20 Python
Pycharm常用快捷键总结及配置方法
2020/11/14 Python
eBay德国站:eBay.de
2017/09/14 全球购物
GAP阿联酋官网:GAP UAE
2017/11/30 全球购物
新秀丽官方旗舰店:Samsonite拉杆箱、双肩包、皮具
2018/03/05 全球购物
新加坡领先的在线生活方式和杂货购物网站:EAMART
2019/04/02 全球购物
陈欧广告词
2014/03/14 职场文书
授权委托书范本(单位)
2014/09/28 职场文书
继续教育个人总结
2015/03/03 职场文书