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使用range函数计算一组数和的方法
May 07 Python
python计算一个序列的平均值的方法
Jul 11 Python
Windows下Anaconda2安装NLTK教程
Sep 19 Python
python实现词法分析器
Jan 31 Python
详解Python数据分析--Pandas知识点
Mar 23 Python
pycharm修改file type方式
Nov 19 Python
Python数组并集交集补集代码实例
Feb 18 Python
python和php哪个更适合写爬虫
Jun 22 Python
Python pytesseract验证码识别库用法解析
Jun 29 Python
使用Keras训练好的.h5模型来测试一个实例
Jul 06 Python
django有哪些好处和优点
Sep 01 Python
python实现自动化群控的步骤
Apr 11 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绝对路径与相对路径之间关系的的分析
2010/03/03 PHP
点击广告后才能获得下载地址
2006/10/26 Javascript
JavaScript URL参数读取改进版
2009/01/16 Javascript
js导航菜单(自写)简单大方
2013/03/28 Javascript
jQuery实现页面滚动时层智能浮动定位实例探讨
2013/03/29 Javascript
jquery ready函数、css函数及text()使用示例
2013/09/27 Javascript
使用js获取图片原始尺寸
2014/12/03 Javascript
在JS方法中返回多个值的方法汇总
2015/05/20 Javascript
jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)
2015/10/28 Javascript
Bootstrap实现响应式导航栏效果
2015/12/28 Javascript
AngularJS页面访问时出现页面闪烁问题的解决
2016/03/06 Javascript
js和jQuery设置Opacity半透明 兼容IE6
2016/05/24 Javascript
JavaScript使用Range调色及透明度实例
2016/09/25 Javascript
详解Vue.js入门环境搭建
2017/03/17 Javascript
在Vue.js中使用Mixins的方法
2017/09/12 Javascript
JavaScript中严格判断NaN的方法
2018/02/16 Javascript
在element-ui的el-tree组件中用render函数生成el-button的实例代码
2018/11/05 Javascript
微信小程序 弹窗输入组件的实现解析
2019/08/12 Javascript
JavaScript创建、读取和删除cookie
2019/09/03 Javascript
vuex 实现getter值赋值给vue组件里的data示例
2019/11/05 Javascript
[18:16]sakonoko 2017年卡尔集锦
2018/02/06 DOTA
Python的pycurl包用法简介
2015/11/13 Python
numpy.where() 用法详解
2019/05/27 Python
关于Numpy中的行向量和列向量详解
2019/11/30 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
2020/02/24 Python
Python如何使用paramiko模块连接linux
2020/03/18 Python
Python实现Wordcloud生成词云图的示例
2020/03/30 Python
全世界最美丽的四星和五星级酒店预订:Prestigia.com
2017/11/15 全球购物
门卫工作岗位职责
2013/12/17 职场文书
校本教研工作制度
2014/01/22 职场文书
消防安全检查制度
2014/02/04 职场文书
大学生创业计划书怎么写
2014/09/15 职场文书
2014第二批党员干部对照“四风”找差距检查材料思想汇报
2014/09/18 职场文书
借条格式范本
2015/05/25 职场文书
大国崛起观后感
2015/06/02 职场文书
素质拓展训练感想
2015/08/07 职场文书