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 07 Python
Python实现删除文件但保留指定文件
Jun 21 Python
轻松掌握python设计模式之访问者模式
Nov 18 Python
python输入错误密码用户锁定实现方法
Nov 27 Python
Python逐行读取文件中内容的简单方法
Feb 26 Python
浅谈Python 敏感词过滤的实现
Aug 15 Python
Python 实用技巧之利用Shell通配符做字符串匹配
Aug 23 Python
python装饰器代替set get方法实例
Dec 19 Python
利用Tensorflow的队列多线程读取数据方式
Feb 05 Python
Python调用接口合并Excel表代码实例
Mar 31 Python
Django 解决开发自定义抛出异常的问题
May 21 Python
利用Python实时获取steam特惠游戏数据
Jun 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网页显示各种语法错误
2013/09/23 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
2014/12/16 PHP
php获取远程文件大小
2015/10/20 PHP
PHP翻页跳转功能实现方法
2020/11/30 PHP
PHP7.1新功能之Nullable Type用法分析
2016/09/26 PHP
php格式文件打开的四种方法
2018/02/24 PHP
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
2011/09/27 Javascript
js 取时间差去掉周六周日实现代码
2012/12/25 Javascript
JavaScript splice()方法详解
2020/09/22 Javascript
javascript实现省市区三级联动下拉框菜单
2015/11/17 Javascript
JS用斜率判断鼠标进入DIV四个方向的方法
2016/11/07 Javascript
详解React-Todos入门例子
2016/11/08 Javascript
bootstrap fileinput 插件使用项目总结(经验)
2017/02/22 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
node.js命令行教程图文详解
2019/05/27 Javascript
vue2.x数组劫持原理的实现
2020/04/19 Javascript
[01:53]2016完美“圣”典风云人物:Maybe专访
2016/12/05 DOTA
Python中实现最小二乘法思路及实现代码
2018/01/04 Python
python中itertools模块zip_longest函数详解
2018/06/12 Python
python处理大日志文件
2019/07/23 Python
对django 模型 unique together的示例讲解
2019/08/06 Python
python飞机大战pygame碰撞检测实现方法分析
2019/12/17 Python
Tensorflow之梯度裁剪的实现示例
2020/03/08 Python
IE支持HTML5的解决方法
2009/10/20 HTML / CSS
佳能德国网上商店:Canon德国
2017/03/18 全球购物
JD Sports芬兰:英国领先的运动鞋和运动服饰零售商
2018/11/16 全球购物
英智兴达软件测试笔试题
2016/10/12 面试题
教师评优事迹材料
2014/01/10 职场文书
信息管理与信息系统专业求职信
2014/06/21 职场文书
民政局标准版离婚协议书
2014/12/01 职场文书
项目负责人岗位职责
2015/02/15 职场文书
讲座开场白台词和结束语
2015/05/29 职场文书
超强台风观后感
2015/06/09 职场文书
初中运动会闭幕词范本3篇
2019/12/09 职场文书
SpringBoot2零基础到精通之数据与页面响应
2022/03/22 Java/Android
MySQL提取JSON字段数据实现查询
2022/04/22 MySQL