一、迭代器

  我们已经知道,可以直接作用于for循环的数据类型有以下几种:

  一类是集合数据类型,如listtupledictsetstr等;

  一类是generator,包括生成器和带yield的generator function。

  这些可以直接作用于for循环的对象统称为可迭代对象:Iterable

  可以使用isinstance()判断一个对象是否是Iterable对象:

特点:

  1. 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容
  2. 不能随机访问集合中的某个值 ,只能从头到尾依次访问
  3. 访问到一半时不能往回退
  4. 便于循环比较大的数据集合,节省内存

二、生成器

  一个函数调用时返回一个迭代器,那这个函数就叫做生成器(generator),如果函数中包含yield语法,那这个函数就会变成生成器

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

>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x1022ef630>

  创建Lg的区别仅在于最外层的[]()L是一个list,而g是一个generator。

  我们可以直接打印出list的每一个元素,但我们怎么打印出generator的每一个元素呢?

  如果要一个一个打印出来,可以通过next()函数获得generator的下一个返回值:

  yield的主要效果呢,就是可以使函数中断,并保存中断状态,中断后,代码可以继续往下执行,过一段时间还可以再重新调用这个函数,从上次yield的下一句开始执行

       *可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。 

  生成器都是Iterator对象,但listdictstr虽然是Iterable,却不是Iterator

  把listdictstrIterable变成Iterator可以使用iter()函数:

 1 import time
 2   def consumer(name):
 3      print("%s 准备吃包子了!" %name)
 4     while True:
 5         baozi = yield                    # yield 通过 send()方法接收值
 6         print("包子[%s]来了,被[%s]吃了" %(baozi,name))
 7
 8 def producer(name):
 9     c1 = consumer('A')
10     c2 = consumer('B')
11      c3 = consumer('C')
12
13     c1.__next__()
14    c2.__next__()
15      c3.__next__()
16
17    print("%s 开始准备做包子了!" % name)
18
19     for i in range(10):
20         time.sleep(1)
21          print('做了3个包子')
22         c1.send(i)
23         c2.send(i)
24          c3.send(i)
25
26  producer('hh')

为什么listdictstr等数据类型不是Iterator

这是因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。

Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。

三。装饰器

 1 # 验证登陆
 2 def login(func):
 3     def inner(*args,**kwargs):
 4         print("login success...")
 5         return func(*args,**kwargs)
 6     return inner
 7
 8 # 验证是否是会员用户
 9 def member(func):
10     def inner(*args,**kwargs):
11         print("welcome member...")
12         return func(*args,**kwargs)
13     return inner
14
15 def home():
16     print("welcome to Home...")
17
18 # @login内部会执行一下操作:
19 # 1.执行login函数,并将 @login 下面的 函数 作为login函数的参数,即:@login 等价于 login(movie)
20 # 2.•将执行完的 login 函数返回值赋值给@login下面的函数的函数名
21 @login
22 @member
23 def movie(name,passwd):
24     print("welcome [%s] [%s] to movie...." % (name,passwd))
25
26 @member
27 @login
28 def music(name):
29     print("welcome [%s] to music..." % name)
30
31 movie('huhuan','123')
32 music('huhuan')
33 home()

四。json & pickle数据化序列

参考 http://www.cnblogs.com/alex3714/articles/5161349.html

转载于:https://www.cnblogs.com/Dummer/p/8592009.html

Python之freshman04相关推荐

  1. Github配置(git+vscode+python+jupyter)

    ①下载git 打开 git bash 工具的用户名和密码存储 $ git config --global user.name "Your Name" $ git config -- ...

  2. 【实验楼】python简明教程

    ①终端输入python进入 欣赏完自己的杰作后,按 Ctrl + D 输入一个 EOF 字符来退出解释器,你也可以键入 exit() 来退出解释器. ②vim键盘快捷功能分布 ③这里需要注意如果程序中 ...

  3. 【Kaggle Learn】Python 5-8

    五. Booleans and Conditionals Using booleans for branching logic x = True print(x) print(type(x))''' ...

  4. 【Kaggle Learn】Python 1-4

    [Kaggle Learn]Python https://www.kaggle.com/learn/python 一. Hello, Python A quick introduction to Py ...

  5. 使用python愉快地做高数线代题目~

    今天接触到了python,发现真是极易上手啊!对比c语言是什么鬼东西= = 诶,等下,看完教学文章发现TA在下面写了这句话 如果做了前面的内容你可能已被吸引了,觉得c语言真的是废材! 不...不是的. ...

  6. python 位运算与等号_Python 运算符

    和大多数语言一样,Python也有很多运算符,并且运算符跟其他语言的运算符大同小异接下来一一介绍: 算术运算符: 运算符描述实例 +加 - 两个对象相加a+b的输出结果是30 -减 - 得到复数或者一 ...

  7. python减小内存占用_如何将Python内存占用缩小20倍?

    当程序执行过程中RAM中有大量对象处于活动状态时,可能会出现内存问题,特别是在对可用内存总量有限制的情况下. 下面概述了一些减小对象大小的方法,这些方法可以显著减少纯Python程序所需的RAM数量. ...

  8. python中排序英文单词怎么写_Python实现对文件进行单词划分并去重排序操作示例...

    本文实例讲述了Python实现对文件进行单词划分并去重排序操作.,具体如下: 文件名:test1.txt 文件内容: But soft what light through yonder window ...

  9. python程序如何执行死刑图片_如何判断对象已死

    已死的对象就是不可能被任何途径使用的对象,有以下几种方法判断一个对象是否已经死了: 引用计数 给对象添加一个引用计数器,每当有一个地方引用他,计算器就加 1:当引用失效时,计数器减 1:任何时刻计数器 ...

最新文章

  1. card样式 layui_layui样式修改
  2. conv2d函数_Pytorch 从0开始学(6)——Conv2d 详解
  3. 关于C语言的问卷调查
  4. esp8266 wifi信号强度设置
  5. Jmeter-获取响应结果中参数出现的次数
  6. 从人人网抓取高校数据信息,包括,省份 - 高校 - 院系 (提供最终SQL文件下载)...
  7. SAP BTP 上使用 Mobile Back-End Tools(MBT)进行全栈开发的方法概述
  8. tsp matlab,五个城市的TSP问题MATLAB程序.doc
  9. 剑指offer 15.二进制中1的个数
  10. Distribution is all you need:这里有12种做ML不可不知的分布
  11. Linux操纵零碎下设置JSP开发环境的方式
  12. R VS Python, 你会选择谁呢?
  13. Linux入门——文本处理三剑客之gnu awk
  14. Raki的读paper小记:An Effective Transition-based Model for Discontinuous NER
  15. JavaScript的==和Java的==比较
  16. python实现图书借阅管理系统
  17. CSAPP ArchLab
  18. 高通MSM8998芯片数据资料参考
  19. 搜索 dfs+bfs
  20. putty 下载地址

热门文章

  1. 2021完整版:Kubernetes Deployment故障排除的可视化指南
  2. 拉面哥的火爆看新媒体时代的底层逻辑!
  3. 看尚电视adb安装当贝桌面,并开机自启
  4. 出租车不需要司机了?带你体验无人驾驶出租车!|『智能产品家』第三期
  5. 第三方 Masonry约束的使用
  6. 十三:python知识总结(更新中)
  7. 无刷无感直流电机驱动硬件分析
  8. 【谷歌地图--DirectionsSDK集成】
  9. 华云数据出席“云网芯安密屏”讨论会:加快数字化转型 推动湖北信创产业快速发展
  10. Unity游戏开发时注意事项和难点