博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 迭代器和生成器
阅读量:5249 次
发布时间:2019-06-14

本文共 1575 字,大约阅读时间需要 5 分钟。

list1 = iter([11,22,33,44,55,66,77,88,99]) print (list1.__next__())   print (list1.__next__()) 结果: 11 22 结论:迭代器,只能取next的值。 应用:
fp = open("ha.bak") for line in fp:     print (line.strip('\n')) fp.close() with open("ha.bak",'r') as fp:     for line1 in fp:         print (line1.strip()) 在for line in fp中也可以使用for line in fp.readlines()函数,但是这样读起来效率很低,for line in fp可以像迭代器一样,一条一条的读入到内存中,不需要一次性读入。 生成器:
def fab(max):     n = 0     a = 0     b = 1     while n < max: yield b         #print (b)         a, b = b, a + b         n = n + 1 f = fab(5) print (f.__next__()) print (f.__next__()) print (f.__next__()) print (f.__next__()) print (f.__next__()) print (f.__next__()) 使用yield参数相当于返回这样一个值(b),但是这样的返回不是作为函数的结束而返回的,而是像中断一样,下次你再访问的时候,还是从刚才那个中断开始。 

  1

  1
  2
  3
  5
  Traceback (most recent call last):
  File "D:/Python/day3/Test.py", line 20, in <module>
  print (f.__next__())
  StopIteration

  查看另外一个例子“

def withdraw(account):     while account > 0:         account -= 100         yield 1         print ("withdraw again") f = withdraw(500) print (f.__next__()) print ("first next") print (f.__next__()) print ("second next") print (f.__next__()) print ("third next") print (f.__next__()) print ("fourth next") print (f.__next__()) print ("fifth next")

  1

  first next
  withdraw again
  1
  second next
  withdraw again
  1
  third next
  withdraw again
  1
  fourth next
  withdraw again
  1
  fifth next

  在这个例子中,每次取100最多只能有五次取钱的机会。在print (f.__next__())函数中间可以增加其他的程序代码,而当迭代器再次回来运行的时候,还是从刚才保存的状态   开始。这样一个生产迭代器的函数叫做生成器。

 

转载于:https://www.cnblogs.com/python-study/p/5460346.html

你可能感兴趣的文章
C++循环单链表删除连续相邻重复值
查看>>
渣渣小本求职复习之路每天一博客系列——Java基础(3)
查看>>
Jmeter接口压力测试,Java.net.BindException: Address already in use: connect
查看>>
ASP.NET使网页弹出窗口不再困难
查看>>
Leetcode Balanced Binary Tree
查看>>
Leetcode 92. Reverse Linked List II
查看>>
windown快速安装xgboost
查看>>
Linux上安装Libssh2
查看>>
九.python面向对象(双下方法内置方法)
查看>>
go:channel(未完)
查看>>
[JS]递归对象或数组
查看>>
LeetCode(17) - Letter Combinations of a Phone Number
查看>>
Linux查找命令对比(find、locate、whereis、which、type、grep)
查看>>
路由器外接硬盘做nas可行吗?
查看>>
python:从迭代器,到生成器,再到协程的示例代码
查看>>
Java多线程系列——原子类的实现(CAS算法)
查看>>
在Ubuntu下配置Apache多域名服务器
查看>>
多线程《三》进程与线程的区别
查看>>
linux sed命令
查看>>
LeetCode 160. Intersection of Two Linked Lists
查看>>