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 相关文章推荐
用smtplib和email封装python发送邮件模块类分享
Feb 17 Python
python网络编程学习笔记(10):webpy框架
Jun 09 Python
Python中内置的日志模块logging用法详解
Jul 12 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
Nov 16 Python
Python入门学习指南分享
Apr 11 Python
Python面向对象之静态属性、类方法与静态方法分析
Aug 24 Python
Python模拟百度自动输入搜索功能的实例
Feb 14 Python
python实时检测键盘输入函数的示例
Jul 17 Python
python实现简单成绩录入系统
Sep 19 Python
Python3批量创建Crowd用户并分配组
May 20 Python
Python sklearn中的.fit与.predict的用法说明
Jun 28 Python
python boto和boto3操作bucket的示例
Oct 30 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中的Session和Cookie
2013/06/21 PHP
weiphp微信公众平台授权设置
2016/01/04 PHP
PHP类型约束用法示例
2016/09/28 PHP
PHP+Oracle本地开发环境搭建方法详解
2019/04/01 PHP
Laravel 修改验证异常的响应格式实例代码详解
2020/05/25 PHP
JS input 数字验证代码
2009/07/30 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
邮箱下拉自动填充选择示例代码附图
2014/04/03 Javascript
js下将阿拉伯数字每三位一逗号分隔(如:15000000转化为15,000,000)
2014/06/02 Javascript
Json实现异步请求提交评论无需跳转其他页面
2014/10/11 Javascript
把Node.js程序加入服务实现随机启动
2015/06/25 Javascript
easyui Droppable组件实现放置特效
2015/08/19 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
2016/10/10 Javascript
详解vue中组件参数
2018/07/09 Javascript
解决Vue @submit 提交后不刷新页面问题
2020/07/18 Javascript
解决vue项目router切换太慢问题
2020/07/19 Javascript
[49:27]LGD vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python输出各行命令详解
2018/02/01 Python
Python 解决中文写入Excel时抛异常的问题
2018/05/03 Python
解决pandas中读取中文名称的csv文件报错的问题
2018/07/04 Python
django认证系统实现自定义权限管理的方法
2018/07/16 Python
pandas通过loc生成新的列方法
2018/11/28 Python
Python数据集切分实例
2018/12/08 Python
ubuntu 16.04下python版本切换的方法
2019/06/14 Python
如何使用Python实现自动化水军评论
2019/06/26 Python
python打印文件的前几行或最后几行教程
2020/02/13 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
利用python实现逐步回归
2020/02/24 Python
python中使用you-get库批量在线下载bilibili视频的教程
2020/03/10 Python
Django-Scrapy生成后端json接口的方法示例
2020/10/06 Python
五年级科学教学反思
2014/02/05 职场文书
洗发露广告词
2014/03/14 职场文书
会计试用期工作总结2015
2015/05/28 职场文书
2015年学校政教工作总结
2015/07/20 职场文书
小学中队长竞选稿
2015/11/20 职场文书
2016年学生会感恩节活动总结
2016/04/01 职场文书