加入收藏 | 设为首页 | 会员中心 | 我要投稿 莱芜站长网 (https://www.0634zz.com/)- 云连接、建站、智能边缘云、设备管理、大数据!
当前位置: 首页 > 编程开发 > Python > 正文

Python 生成器实践

发布时间:2023-02-16 13:52:20 所属栏目:Python 来源:互联网
导读:1. 遍历文本文件中的单词 假设存在文本文件 test.txt,内容如下: The Zen of Python Beautiful is better than ugly Simple is better than complex 注意文件包含有空行,要求完成如下任务: 统计文件有多少个单词 统计文件中每个单词出现的频率 2. 直接遍
  1. 遍历文本文件中的单词
  假设存在文本文件 test.txt,内容如下:
 
  The Zen of Python
  
  Beautiful is better than ugly
  
  Simple is better than complex
  注意文件包含有空行,要求完成如下任务:
 
  统计文件有多少个单词
 
  统计文件中每个单词出现的频率
 
  2. 直接遍历的方法
  请参考词条 “Python 中的迭代器趣味实践” 的第 2 小节,通过直接遍历文件中单词的方式实现 “统计单词的个数” 和 “统计单词的出现频率”。
 
  2.1 优点
  直接遍历的方式的优点在于代码简单,框架代码如下:
 
  file = open('test.txt')while True:line = file.readline()if not line:breakwords = line.split() for word in words:处理 word
  在第 4 行,读取文件的每一行
 
  在第 8 行,将文件的一行分割为多个单词
 
  在第 10 行,对当前正在遍历的单词进行处理
 
  2.2 缺点
  直接遍历的方式的缺点在于代码重复,实现 “统计单词个数” 和 “统计单词出现频率” 这两个功能需求时,遍历单词的框架代码是重复的。
 
  3. 基于迭代器的方法
  请参考词条 “Python 中的迭代器趣味实践” 的第 3 小节和第 4 小节,通过基于迭代器的方式实现 “统计单词的个数” 和 “统计单词的出现频率”。
 
  3.1 优点
  使用迭代器的方式的优点在于遍历单词的代码简单,使用如下代码:
 
  for word in IterateWord(file):处理 word
  即可对文件中所有的单词进行遍历。
 
  3.2 缺点
  使用迭代器的方式的缺点在于迭代器的实现较为复杂,相比之下,直接遍历的框架代码则非常简单直观。在下面的小节中,我们基于生成器简化迭代器的实现。
 
  4. 基于生成器的方法
  4.1 实现生成器
  本小节使用生成器实现遍历文件中所有的单词,代码如下:
 
  def generateWord(file):while True:line = file.readline()if not line:breakwords = line.split() for word in words:yield word
  在第 1 行,定义生成器函数 generateWord,遍历文件 file 中的单词
 
  在第 3 行,读取文件的一行
 
  在第 4 行,如果 not line 为真,则表示读取文件结束,使用 break 退出
 
  在第 7 行,把 line 切割为多个单词
 
  在第 8 行,遍历列表 words
 
  在第 9 行,使用 yield 关键字返回当前正在遍历的单词
 
  4.2 统计单词的个数
  file = open('test.txt')count = for word in generateWord(file):print(word)count = count +
  在第 1 行,打开文件 test.txt
 
  在第 2 行,变量 count 用于记录文件中单词的个数
 
  在第 4 行,遍历文件中的每一个单词
 
  在第 5 行,打印当前遍历的单词
 
  在第 6 行,统计单词个数
 
  程序运行输出结果如下:
 
  The
  Zen
  of
  Python
  Beautiful
  is
  better
  than
  ugly
  Simple
  is
  better
  than
  complex
  count = 14
  4.3 统计单词的出现频率
  file = open('test.txt')dict = {}for word in generateWord(file):if word in dict:dict[word] += else:dict[word] = for word,count in dict.items():print('%s: %d' % (word, count))
  在第 1 行,打开文件 test.txt,变量 file 标识已经打开的文件
 
  在第 4 行,遍历每一行文本的单词
 
  则在第 8 行,该单词出现的次数初始化为 1
 
  则在第 5 行,该单词出现的次数加 1
 
  在第 5 行,如果 word 已经存在于 dict 中
 
  在第 7 行,如果 word 不存在于 dict 中
 
  在第 10 行,打印 dict 的键和值
 
  程序运行输出结果如下:
 
  The: 1
  Zen: 1
  of: 1
  Python: 1
  Beautiful: 1
  is: 2
  better: 2
  than: 2
  ugly: 1
  Simple: 1
  complex: 1
  结果表明:
 
  单词 is better than 出现了 2 次
 
  其它单词出现了 1 次

(编辑:莱芜站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读