课程目标

  1. 列表生成式
  2. 生成器
  3. 迭代器

列表生成式
• Python内置的非常简单却强大的可以用来创建list的生成式
• 快速的把字典内容转变成list

>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> [k + '=' + v for k, v in d.items()]
['y=B', 'x=A', 'z=C']

生成器
• 循环的过程中不断推算出后续的元素呢?这样就不必创建完整
的list,这种一边循环一边计算的机制,称为生成器:
generator
• 两种定义

  1. (列表生成式)
  2. 带yield的generator function
    L = [x * x for x in range(10)]
    print(L)
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    g = (x * x for x in range(10))
    print(L)
    <generator object at 0x1034dc667>

迭代器
• for循环可以应用下列类型:

  1. 集合数据类型,list,tuple,dict,set,str等
  2. generator ,生成器和带yield的generator function等 • 直接可作用于for循环的叫可迭代对象:Iterable
    • 直接可作用于next方法的叫可以生成器对象:Iterator
    • 生成器可以同时作用于for循环和next()函数,不断调用,
    直到抛出StopIteration错误
d = {'x': 'A', 'y': 'B', 'z': 'C' }
print([k+'=' + v for k,v in d.items()])# 生成list,【1,2,3....10】print(list(range(1,11)))print([x*x for x in range(1,11)])#'abc' ,'123' 输出a1a2a3,b1b2b3,c1c2c3print([m+n for m in 'abc' for n in '123'])# 把a.b.c的点进行筛除
print([m+n for m in 'a.b.c' for n in '123' if m!= '.'])# 生成器g = (x * x for x in range(10))
print(g)#next 不知道有多少个元素
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))#yield
#斐波那契数列 1,1,2,3,5,8 后一个数等于前两个数的和
def fib(max):n, a, b = 0, 0, 1while n < max:print(b)a, b = b, a+bn = n + 1return 'done'fib(6)#输出关键字换成yield
def fib(max):n, a, b = 0, 0, 1while n < max:yield ba, b = b, a+bn = n + 1return 'done'g = fib(6)print(next(g))
print(next(g))
print(next(g))while True:try:x = next(g)print(x)except StopIteration as e:print('没有数据了',e.value)break'''迭代器
'''#判断一个对象是否可迭代# from collections import Iterable
# print(isinstance([],Iterable))
# print(isinstance({},Iterable))
# print(isinstance('abc',Iterable))#判断一个对象是否是生成器 Iterator# from collections import Iterator
# print(isinstance([],Iterator))
# print(isinstance({},Iterator))
# print(isinstance('abc',Iterator))from collections.abc import Iterator
print(isinstance(iter([]),Iterator))
print(isinstance(iter({}),Iterator))
print(isinstance(iter('abc'),Iterator))
# print(isinstance(iter(123),Iterator))iter([])
``作业
# 输出:
# [1]
# [1, 1]
# [1, 2, 1]
# [1, 3, 3, 1]
# [1, 4, 6, 4, 1]
n = 0
results = []
for t in triangles():
print(t)
results.append(t)
n = n + 1
if n == 10:
break
if results == [
[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1],
]:
print('测试通过!')
else:
print('测试失败!')想了很久都没想出来,看了一下别人的写法是:```python
def triangles():L=[1]while True:yield L#这是一个生成器L=[L[0]]+[L[t]+L[t+1] for t in range(len(L)-1)]+[L[-1]]

小结

通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:

generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。

如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator:

def fib(max):n, a, b = 0, 0, 1while n < max:yield ba, b = b, a + bn = n + 1return 'done'

最难理解的就是generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行

python特训营-**常用设计模式**相关推荐

  1. python特训营-函数

    课程目标 了解函数 函数的格式定义 函数文档 局部变量和全局变量 了解函数 • 函数的本质就是功能的封装,和对代码的抽象 • 函数的作用: 5. 避免开发重复性相同代码 6. 便于程序的理解与维护 7 ...

  2. python特训营-文件读写

    课程目标 Python内置的文件读写操作 通过OS模块进行文件和文件夹操作 通过OS模块进行路径操作 Python内置的文件读写操作 • open() 打开或者创建一个文件 格式:open('文件路径 ...

  3. python特训营-继承和多态

    课程目标 继承 多态 类型判断 继承 • 定义一个class的时候,可以从某个现有的class继承,新的 class称为子类(Subclass) • 被继承的class称为基类.父类或超类(Base ...

  4. Python特训营(大数据处理)

    文章目录 数据分析过程 定位数据 获取数据 清洗数据 存储数据 加工数据 展现数据 使用数据 大数据分析特点 4v NoSQL四种 大数据处理 采集 预处理 数据清洗 遗漏数据 离群点处理 噪声的处理 ...

  5. python数据分析师下载_2020云开见明Python数据分析师特训营,全套课程资源下载...

    课程名称 Python数据分析师特训营(python数据分析从入门到精通) 课程预期目标: 01熟练撞我python语法和常用数据结构 02熟练掌握数据分析相关库的运用 03岁数据分析相关流程和常用方 ...

  6. python人工智能应用锁_人工智能Python编程特训营——情报密码锁

    参加了人工智能Python编程特训营这门课程,在这里记录一下自己的学习过程. 加密技术的基本分类对称式加密:加密和解密使用同一个密钥.信息接收双方都需事先知道密钥和加密解密算法且密钥是相同的,之后便是 ...

  7. 人工智能python营_贪心学习院人工智能python编程特训营

    贪心学习院人工智能python编程特训营 实战一项目作业 情报密码 #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ ...

  8. python量化投资实训班_Python量化投资实训营

    配合大鱼金融联手塑造 清华导师领衔授课,全程在清华校园上课 五天掌握Python量化投资必备技能 Python量化投资实训营 五大课程亮点 1. 结构化课程与实战教学 要深入学习量化投资,不仅需要学习 ...

  9. 11.1 常用的包(熟悉) | 拉勾Java就业急训营

    学习资源来源:拉勾教育_Java就业急训营 11.1 常用的包(熟悉) 11.1.1 包的名称和功能 java.lang包--该包是Java语言的核心包,并且该包中的所有内容由Java虚拟机自动导入. ...

最新文章

  1. nrf51822-提高nordic ble数据发送速率
  2. icloud 购买存储空间_如何释放iCloud存储空间
  3. .NET 云原生架构师训练营(模块二 基础巩固 安全)--学习笔记
  4. flex结合asp.net上传深入详细解说(转载)
  5. Python3 高级编程技巧(部分)
  6. python调用shell命令 批量执行python程序
  7. java 反编译工具=_java反编译工具(XJad)v2.2
  8. 密码战争,区块链技术之路
  9. Android 通过AlarmClock设置系统闹钟
  10. 2021-04-13
  11. 无法在节点上执行物理内存检查
  12. 终于,字节跳动要取消大小周了,我 1.7 万人的票圈都快炸了!
  13. 机器学习、深度学习中常用的优化算法详解——梯度下降法、牛顿法、共轭梯度法
  14. 试用计算机绘制*组成的图案c语言,C语言绘图与计算机仿真技术
  15. Java BMI计算程序
  16. 笔记:springboot-admin 整合spring security应用注册失败问题
  17. vue引入百度地图实现轨迹绘制
  18. 使用StreamReader逐行读取文件
  19. 年中总结 | 经历过求职春招刷题备考疫情洪水的一届毕业预备军真的太太太难啦!
  20. Linux 环境搭建(如何获得一个免费云服务器)以及Linux基本指令

热门文章

  1. java计算机毕业设计婚恋网站源码+mysql数据库+系统+lw文档+部署
  2. java中在方法体内抛出异常_Java异常处理中___用于方法体内,抛出一个异常对象。...
  3. Chrome浏览器的渲染原理
  4. python编写一个程序、输入一个数判断其是偶数还是奇数,Python - 练习 判断输入是奇数,偶数,小数,还是字符...
  5. 如何准备Google软件工程师面试?
  6. 【每日早报】2019/06/24
  7. Linux使用XVFB做Selenium测试
  8. MFC界面库BCGControlBar v32.0 - 对话框、仪表盘控件升级
  9. 笔记本电脑静音后再取消静音,外设会没声音解决
  10. 亚马逊网上商店2006年读者最喜欢的计算机图书介绍