本文共 1227 字,大约阅读时间需要 4 分钟。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | #!/usr/bin/env python # -*- coding: utf-8 -*- #tell() 方法返回文件的当前位置,即文件指针当前位置。 #使用with的目的是为里可以自动close掉文件对象 #生成器简单小粒子 def foo1(): yield 1 yield 2 yield 3 yield 4 for i in foo1(): print (i) ''' 如执行:print(foo1()) 调用这个函数的时候,返回的是一个生成器 生成器只有遍历的时候函数里的代码才会去执行,并且每一次循环只执行一条 生成器是一个带yield语句的函数 执行过程简单概述: 1、首先执行函数,然后遍历,遍历到第一条的时候,执行yield 1 2、遍历到第2条的时候,不经过yield 1,而是直接执行yield 2 3、以此类推 4、特点:会暂时保存执行的位置 ''' #文件遍历小粒子 #普通函数实现 #定一个需读取的文件 files = '/etc/passwd' #普通函数 def foo2(): with open (files, 'r' ) as f: print ( '文件名: ' , f.name) seek_id = 0 while True : f.seek(seek_id) data = f.readline() if data: #获取文件指针的当前位置 seek_id = f.tell() print ( '文件指针当前位置: %d' % (seek_id)) print ( '读取的数据为: %s' % (data)) else : break #直接调用这个函数 foo2() #生成器实现 def foo(): seek_id = 0 while True : with open (files, 'r' ) as f: f.seek(seek_id) data = f.readline() if data: seek_id = f.tell() print ( '文件指针当前位置: %d' % (seek_id)) yield data else : break #通过遍历生成器来执行函数里面的代码 for val in foo(): print (val) |
1 | <br> |
转载地址:http://cbcia.baihongyu.com/