day4 迭代器与生成器解析
一、迭代器
迭代器是访问集合元素的一种方式。其实迭代器就是一种列表,只是访问集合元素的时候比较特殊,具有一些特定功能,记忆功能,能够记住用户上一次的状态。迭代器是访问集合元素的一种方式。并且,迭代器只能前进,不能后退。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。
特定:
(1).访问者不需要关心迭代器内部的文件,仅需通过next()方法不断去取下一个内容;
(2).不能随机访问集合中的某个值,只能从头到尾依次访问;
(3).访问到一半时不能往回退;
(4).便于循环比较大的数据集合,节省内存生成一个迭代器。
iter()用来声明迭代器,示例如下:
names = iter(["alex","sb",11,22,"gengchangxue"])
  print(names.__next__())
  print(names.__next__())
  print(names.__next__())
  print(names.__next__())
  print(names.__next__())
  print(names.__next__())
运行结果如下:
alex
  sb
  11
  22
  gengchangxue
  Traceback (most recent call last):
    File "/home/zhuzhu/day4/iterator.py", line 7, in <module>
      print(names.__next__())
  StopIteration
从上面结果可以看出,迭代器是使用__next__()方法来遍历集合中的每一个元素,当超过列表的长度的时候会出现错误,stoplteration(停止迭代)。上面集合有5个元素,我们去了6次,结果就报错。迭代器只能从元素的第一个值开始遍历,直到所有的元素遍历完为止。中间过程不能后退,也不能取中间某个特定位置的值。
迭代器中只有一个__next__()方法,用来去元素。
二、生成器generator
定义:一个函数调用时返回一个迭代器,那这个函数就叫做生成器(generator),如果函数中包含yield语法,那这个函数就会变成生成器。
其实,生成器(generator)函数中包含yield,yield的作用与return作用类似,只是yield结束本地循环之后,记录程序运行的状态,能够保持在当前状态,当用户再一次调用的时候,会从这里开始,重新进行循环,并且,yield能够返回一个值给函数,并且yield与send结合还能够接收返回值。
def cash_money(amount):
        while amount > 0:
              amount -= 100
              yield 100
              print("败家子,又来取钱了!...")
atm = cash_money(600)
上面我们写了一个函数,并且调用这个函数,但是print()语句并没有执行。下面来看看atm的类型:
print(type(atm))
运行如下:
<class 'generator'>
可以看出,atm是一个生成器,生成器的调用要使用__next__()方法。实例如下:
def cash_money(amount):
    while amount > 0:
              amount -= 100
              yield 100
              print("败家子,又来取钱了!...")
  atm = cash_money(600)
  print(atm.__next__())
  print(atm.__next__())
生成器的作用,我们之前学的程序都是串行的,从上到下进行执行,如果中间某个过程没有执行,那么会一直等待,但是我们使用yield就能够保持记忆功能。让程序其做其他的事情,作用之后在回来继续做这件事情,比如我们去做一个大保健,做完之后重新回来取钱。
def cash_money(amount):
        while amount > 0:
              amount -= 100
              yield 100
              print("败家子,又来取钱了!...")
    atm = cash_money(600)
    print(atm.__next__())
    print(atm.__next__())
    print("叫个大保健")
    print(atm.__next__())
运行结果如下:
100
  败家子,又来取钱了!...
  100
  叫个大保健
  败家子,又来取钱了!...
  100
yield就是保存函数的状态,可以让我们先去完成其他事情,然后继续执行。生成器在某些时候很有用,比如我们想保存之前用户的状态,以便用户下次登录能够知道之前的信息。比如银行的系统,用户取钱之后肯定要进行减去金额,并且保存之前操作的状态。
day4 迭代器与生成器解析的更多相关文章
- Day4 闭包、装饰器decorator、迭代器与生成器、面向过程编程、三元表达式、列表解析与生成器表达式、序列化与反序列化
		
一.装饰器 一.装饰器的知识储备 1.可变长参数 :*args和**kwargs def index(name,age): print(name,age) def wrapper(*args,**k ...
 - 闭包、装饰器decorator、迭代器与生成器、面向过程编程、三元表达式、列表解析与生成器表达式
		
一.装饰器 一.装饰器的知识储备 不想修改函数的调用方式,但是还想在原来的函数前后添加功能 1.可变长参数 :*args和**kwargs def index(name,age): print(na ...
 - Python自动化运维之7、生成器、迭代器、列表解析、迭代器表达式
		
迭代器和生成器 1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外 ...
 - Python基础(8)_迭代器、生成器、列表解析
		
一.迭代器 1.什么是迭代 1 重复 2 下次重复一定是基于上一次的结果而来 l=[,,,] count= while count < len(l): print(l[count]) count ...
 - Python 从零学起(纯基础) 笔记 之 迭代器、生成器和修饰器
		
Python的迭代器. 生成器和修饰器 1. 迭代器是访问集合元素的一种方式,从第一个到最后,只许前进不许后退. 优点:不要求事先准备好整个迭代过程中的所有元素,仅仅在迭代到某个元素时才计算该元素,而 ...
 - Python之迭代器和生成器
		
Python 迭代器和生成器 迭代器 Python中的迭代器为类序列对象(sequence-like objects)提供了一个类序列的接口,迭代器不仅可以对序列对象(string.list.tupl ...
 - Python可迭代对象、迭代器和生成器
		
Python可迭代对象.迭代器和生成器 python 函数 表达式 序列 count utf-8 云栖征文 python可迭代对象 python迭代器 python生成器 摘要: 8.1 可迭代对象( ...
 - Python 迭代器和列表解析
		
Python 迭代器和列表解析 1)迭代器 一种特殊的数据结构,以对象形式存在 >>> i1 = l1.__iter__() >>> i1 = iter(l1) 可 ...
 - python函数(5):迭代器和生成器
		
迭代器和生成器是函数中的一大重点,务必掌握,何为迭代?何为迭代器? 预习: 处理文件,用户指定要查找的文件和内容,将文件中包含要查找内容的每一行都输出到屏幕 一.迭代器 for i in 50: pr ...
 
随机推荐
- Codeforces 19.E Fairy
			
E. Fairy time limit per test 1.5 seconds memory limit per test 256 megabytes input standard input ou ...
 - bzoj3938 Robot
			
3938: Robot Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 336 Solved: 112[Submit][Status][Discuss ...
 - 手脱Aspack变形壳1
			
1.载入PEID Aspack v2.12 -> www.aspack.com 2.载入OD,不管是看查壳信息还是看入口特征都跟我上一次发的一个手脱Aspack v2.12的帖子相同http:/ ...
 - 限制SSH远程登录用户仅能只读访问Linux中指定的目录
			
资料参考:http://os.51cto.com/art/201703/534895.htm 背景需求: 在TOMCAT服务器上建立一个普通帐号log_user,只能查看TOMCAT日志,不能删改任何 ...
 - TersorflowTutorial_MNIST数据集上简单CNN实现
			
MNIST数据集上简单CNN实现 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 Tensorflow机器学习实战指南 源代码请点击下方链接欢迎加星 Tesorflow实现基于MNI ...
 - JavaScript 秘密花园——对象的使用和属性操作
			
JavaScript 中所有变量都是对象,除了两个例外 null 和 undefined. false.toString(); // 'false' [1, 2, 3].toString(); // ...
 - python初步学习-python函数(一)
			
python 函数 函数是组织好的,可重复使用的,用来实现单一或者相关联功能的代码段. 函数能提高应用的模块性和代码的重复利用率. 函数定义 python中函数定义有一些简单的规则: 函数代码块以de ...
 - 23、Xpath
			
1.什么是Xpath?1.XPath即为XMLPath的简称,它是一种用来确定XML文档中某部分位置的语言.2.HTML可以看做是XML的一种实现,所以selenium用户可以使用这种强大的语言在we ...
 - Installation Guide for Appium 1.6.3
			
A.) System Requirements : - Require node 4 or above Xcode 8 iOS 10 B.) Open terminal and type follow ...
 - Mysql储存过程3:if语句
			
--if/else语句 if 条件 then SQL语句 else SQL语句elseifSQL语句 end if; create procedure test1( number int ) begi ...