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 相关文章推荐
Django中对通过测试的用户进行限制访问的方法
Jul 23 Python
Python迭代和迭代器详解
Nov 10 Python
利用Python爬虫给孩子起个好名字
Feb 14 Python
关于Django外键赋值问题详解
Aug 13 Python
对numpy数据写入文件的方法讲解
Jul 09 Python
转换科学计数法的数值字符串为decimal类型的方法
Jul 16 Python
Django集成搜索引擎Elasticserach的方法示例
Jun 04 Python
python安装requests库的实例代码
Jun 25 Python
int在python中的含义以及用法
Jun 27 Python
Django项目uwsgi+Nginx保姆级部署教程实现
Apr 19 Python
Python3自动生成MySQL数据字典的markdown文本的实现
May 07 Python
Python 数据分析之逐块读取文本的实现
Dec 14 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
window+nginx+php环境配置 附配置搭配说明
2010/12/29 PHP
PHP的PDO操作简单示例
2016/03/30 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
2016/05/09 PHP
如何判断php mysqli扩展类是否开启
2016/12/24 PHP
浅谈php中fopen不能创建中文文件名文件的问题
2017/02/06 PHP
根据key删除数组中指定的元素实现方法
2017/03/02 PHP
浅析PHP开发规范
2018/02/05 PHP
用js实现上传图片前的预览(TX的面试题)
2007/08/14 Javascript
鼠标右击事件代码(asp.net后台)
2011/01/27 Javascript
cnblogs 代码高亮显示后的代码复制问题解决实现代码
2011/12/14 Javascript
了解jQuery技巧来提高你的代码(个人觉得那个jquery的手册很不错)
2012/02/10 Javascript
JS HTML5 音乐天气播放器(Ajax获取天气信息)
2013/05/26 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
深入分析javascript中console命令
2016/08/14 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
JavaScript树的深度优先遍历和广度优先遍历算法示例
2018/07/30 Javascript
checkbox在vue中的用法小结
2018/11/13 Javascript
Vue 实现html中根据类型显示内容
2019/10/28 Javascript
Python信息抽取之乱码解决办法
2017/06/29 Python
DataFrame 将某列数据转为数组的方法
2018/04/13 Python
详解Python3 对象组合zip()和回退方式*zip
2019/05/15 Python
python中return不返回值的问题解析
2020/07/22 Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
2020/10/18 Python
python中zip()函数遍历多个列表方法
2021/02/18 Python
纯HTML+CSS3制作导航菜单(附源码)
2013/04/24 HTML / CSS
使用HTML5 Geolocation实现一个距离追踪器
2018/04/09 HTML / CSS
Club Monaco加拿大官网:设计师男女服装
2019/09/29 全球购物
一份比较全的PHP面试题
2016/07/29 面试题
巡警年度自我鉴定
2014/02/21 职场文书
高中竞选班长演讲稿
2014/04/24 职场文书
大学新闻系求职信
2014/06/03 职场文书
2015年党员个人剖析材料
2014/12/18 职场文书
自主招生推荐信怎么写
2015/03/26 职场文书
Python一行代码实现自动发邮件功能
2021/05/30 Python
Javascript的promise,async和await的区别详解
2022/03/24 Javascript
maven 解包依赖项中的文件的解决方法
2022/07/15 Java/Android