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网络编程学习笔记(九):数据库客户端 DB-API
Jun 09 Python
用Python进行基础的函数式编程的教程
Mar 31 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
Feb 18 Python
Python使用smtp和pop简单收发邮件完整实例
Jan 09 Python
Python实现的栈(Stack)
Jan 26 Python
Anaconda入门使用总结
Apr 05 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
May 21 Python
解决Python获取字典dict中不存在的值时出错问题
Oct 17 Python
在Python 中实现图片加框和加字的方法
Jan 26 Python
Python3 翻转二叉树的实现
Sep 30 Python
Python argparse模块应用实例解析
Nov 15 Python
全网非常详细的pytest配置文件
Jul 15 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 用checkbox一次性删除多条记录的方法
2010/02/23 PHP
php小经验:解析preg_match与preg_match_all 函数
2013/06/29 PHP
通过PHP简单实例介绍文件上传
2015/12/16 PHP
PHP实时统计中文字数和区别
2019/02/28 PHP
开发跨浏览器javascript常见注意事项
2009/01/01 Javascript
js select option对象小结
2013/12/20 Javascript
node.js中的console.error方法使用说明
2014/12/10 Javascript
JavaScript获取两个数组交集的方法
2015/06/09 Javascript
你一定会收藏的Nodejs代码片段
2016/02/04 NodeJs
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
Angular的MVC和作用域
2016/12/26 Javascript
js中Number数字数值运算后值不对的解决方法
2017/02/28 Javascript
jquery操作select取值赋值与设置选中实例
2017/02/28 Javascript
AngularJS2中一种button切换效果的实现方法(二)
2017/03/27 Javascript
基于vue2实现左滑删除功能
2017/11/28 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
vue-router权限控制(简单方式)
2018/10/29 Javascript
vue实现的树形结构加多选框示例
2019/02/02 Javascript
Nuxt v-bind绑定img src不显示的解决
2019/12/05 Javascript
vue和小程序项目中使用iconfont的方法
2020/05/19 Javascript
如何实现vue的tree组件
2020/12/03 Vue.js
在HTML中使用JavaScript的两种方法
2020/12/24 Javascript
python的keyword模块用法实例分析
2015/06/30 Python
django中使用POST方法获取POST数据
2019/08/20 Python
美国波西米亚风格服装品牌:Show Me Your Mumu
2018/01/05 全球购物
俄罗斯建筑和装饰材料在线商店:Stroilandia
2020/07/25 全球购物
机械工程师求职自我评价
2013/09/23 职场文书
导游实习生自荐书
2014/01/28 职场文书
语文教学随笔感言
2014/02/18 职场文书
建议书的格式
2014/05/12 职场文书
开工仪式策划方案
2014/05/23 职场文书
财务会计专业求职信
2014/06/09 职场文书
个人作风建设剖析材料
2014/10/11 职场文书
2014年员工工作总结范文
2014/11/18 职场文书
反邪教教育心得体会
2016/01/15 职场文书
Python实现Hash算法
2022/03/18 Python