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是编译运行的验证方法
Jan 30 Python
pymongo实现多结果进行多列排序的方法
May 16 Python
python正则分析nginx的访问日志
Jan 17 Python
pandas的object对象转时间对象的方法
Apr 11 Python
python使用openpyxl库修改excel表格数据方法
May 03 Python
python通过微信发送邮件实现电脑关机
Jun 20 Python
通过自学python能找到工作吗
Jun 21 Python
浅谈keras中的后端backend及其相关函数(K.prod,K.cast)
Jun 29 Python
如何利用Python写个坦克大战
Nov 18 Python
python 实现波浪滤镜特效
Dec 02 Python
pytorch Dataset,DataLoader产生自定义的训练数据案例
Mar 03 Python
使用pd.merge表连接出现多余行的问题解决
Jun 16 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下用GD生成生成缩略图的两个选择和区别
2007/04/17 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
双击滚屏-常用推荐
2006/11/29 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
2013/12/04 Javascript
jquery简单实现鼠标经过导航条改变背景图
2013/12/17 Javascript
JS控制一个DIV层在指定时间内消失的方法
2014/02/17 Javascript
node.js Web应用框架Express入门指南
2014/05/28 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
2014/06/16 Javascript
JavaScript闭包函数访问外部变量的方法
2014/08/27 Javascript
AngularJS 最常用的功能汇总
2016/02/17 Javascript
jquery ajax局部加载方法详解(实现代码)
2016/05/12 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
2016/07/07 Javascript
BootStrap table表格插件自适应固定表头(超好用)
2016/08/24 Javascript
AngularJS动态绑定HTML的方法分析
2016/11/07 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
Js判断H5上下滑动方向及滑动到顶部和底部判断的示例代码
2017/11/15 Javascript
JS实现数组深拷贝的方法分析
2019/03/06 Javascript
Javascript 对象(object)合并操作实例分析
2019/07/30 Javascript
Vue.js组件使用props传递数据的方法
2019/10/19 Javascript
vue 使用async写数字动态加载效果案例
2020/07/18 Javascript
[02:18]DOTA2英雄基础教程 育母蜘蛛
2014/01/20 DOTA
简单的通用表达式求10乘阶示例
2014/03/03 Python
基于python中staticmethod和classmethod的区别(详解)
2017/10/24 Python
Django的分页器实例(paginator)
2017/12/01 Python
python实现数据写入excel表格
2018/03/25 Python
如何利用Python分析出微信朋友男女统计图
2019/01/25 Python
python实现简单学生信息管理系统
2020/04/09 Python
django restframework serializer 增加自定义字段操作
2020/07/15 Python
pandas实现导出数据的四种方式
2020/12/13 Python
Django中ORM的基本使用教程
2020/12/22 Python
工程质量月活动方案
2014/02/19 职场文书
2014最新党员批评与自我批评材料
2014/09/24 职场文书
吃空饷专项整治方案
2014/10/27 职场文书
交警正风肃纪剖析材料
2014/10/29 职场文书
Mac电脑OS系统下安装Nginx的详细教程
2022/04/14 Servers
windows server 2016 域环境搭建的方法步骤(图文)
2022/06/25 Servers