相关练习

1、处理文件,用户指定要查找的文件和内容,将文件中包含要查找内容的每一行都输出到屏幕

  1. #比较 low 的方法
  2. def check_file(filename,aim):
  3. with open(filename,encoding='utf-8') as f: #句柄 : handler,文件操作符,文件句柄
  4. for line in f:
  5. if aim in line:
  6. print(line.strip())
  7. check_file('E:/py/log/log.txt','add')
  8.  
  9. #生成器实现
  10. def check_file(filename,aim):
  11. with open(filename,encoding='utf-8') as f: #句柄 : handler,文件操作符,文件句柄
  12. for line in f:
  13. if aim in line:
  14. yield line
  15. g = check_file('E:/py/log/log.txt','add')
  16. for i in g:
  17. print(i.strip())

2、写生成器,从文件中读取内容,在每一次读取到的内容之前加上 ‘ *** ’ 之后再返回给用户

  1. def check_file(filename):
  2. with open(filename,encoding='utf-8')as f:
  3. for i in f:
  4. yield '***'+i.strip()
  5. #g = check_file("E:/py/log/log.txt")
  6. #for i in g:
  7. # print(i)
  8.  
  9. #也可以这样写
  10. for i in check_file("E:/py/log/log.txt"):
  11. print(i)

加上行号

  1. def dir(url):
  2. with open(url,encoding='utf-8')as f:
  3. for index,i in enumerate(f,1):
  4. yield "*%s* "%index + i.strip()
  5.  
  6. d = dir('E:/py/log/log.txt')
  7. for i in d:
  8. print(i)

面试题

生成器相关的面试题

for 循环套生成器表达式的题,就把 for 循环拆开

题一:阅读下面代码,print 打印的结果是什么?

  1. def demo():
  2. for i in range(4):
  3. yield i
  4. g=demo()
  5.  
  6. g1=(i for i in g)
  7. g2=(i for i in g1)
  8.  
  9. #print(list(g)) #list() 字符串强转
  10. print(list(g1)) #[0, 1, 2, 3]
  11. print(list(g2)) #[]
  12.  
  13. #为什么 list(g2) 中会是空呢?
  14. #因为:g1 里面的值已经悉数给到 list() 当 g2 在找 g1 要值时,g1 已经没值了 所以 g2 返回为空

题二:阅读下面代码,print 打印的结果是什么?

  1. def add(n,i):
  2. return n+i
  3.  
  4. def test():
  5. for i in range(4):
  6. yield i
  7.  
  8. g=test()
  9. for n in [1,10,5]:
  10. g=(add(n,i) for i in g)
  11.  
  12. print(list(g)) #[15,16,17,18]
  13.  
  14. """
  15. #把以上的 for 循环拆开 在 g 这个未知数换成已知的
  16. ###很重要的一点 当 n=1,n=10 的时候,程序并没有执行,只是做了赋值的工作,就过去了
  17. ###那程序是什么时候开始取值的呢?在 list(g) 的时候才执行,这是时候的 n 就是最后一个 n 了
  18. ###前面的 n 已经消失了
  19.  
  20. n = 1
  21. g=(add(n,i) for i in g) #g=test()
  22. n = 10
  23. g=(add(n,i) for i in g) #g=(add(n,i) for i in test()))
  24. n = 5
  25. g=(add(n,i) for i in g) #g=(add(n,i) for i in (add(n,i) for i in test())))
  26.  
  27. #组合起来就是
  28. n = 1
  29. g=(add(n,i) for i in test())
  30. n = 10
  31. g=(add(n,i) for i in (add(n,i) for i in test()))
  32. n = 5
  33. g=(add(n,i) for i in add(n,i) for i in (add(n,i) for i in test()))
  34.  
  35. #结果为:g=[15,16,17,18]
  36. """

day 14 - 2 生成器练习的更多相关文章

  1. IntelliJ IDEA 14 注册码生成器

    IntelliJ IDEA 14 注册码生成器 文件为Java代码 自己编译运行里面的程序输入名称然后就生成注册码了工具:http://yun.baidu.com/s/1cZKsA部分工具生成的注册码 ...

  2. day 14 - 1 生成器

    生成器 生成器 生成器的本质就是迭代器生成器的表现形式 生成器函数 生成器函数 —— 本质上就是我们自己写得函数 生成器表达式生成器函数: 含有 yield 关键字的函数就是生成器函数 特点: 调用函 ...

  3. Python基础(生成器)

    二.生成器(可以看做是一种数据类型) 描述: 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我 ...

  4. Python2.4-原理之函数

    此节来自于<Python学习手册第四版>第四部分 一.函数基础 函数的作用在每个编程语言中都是大同小异的,,这个表是函数的相关语句和表达式. 1.编写函数,a.def是可执行代码,pyth ...

  5. WinForm GDI+自定义控件总结(一)

    前言 由于项目的原因好久没写博客了,也正是项目的原因开始系统的学习WinForm,从而接触到自定义控件的开发.自定义控件的开发有一定的难度,对开发者要求比较高,需要了解Windows运行的机制,熟悉w ...

  6. (转)用AGG实现高质量图形输出(三)

    转自 :http://www.cnblogs.com/CoolJie/archive/2011/04/27/2030260.html 线段生成器(Span Generator) 我们前面举的例子使用的 ...

  7. python核心编程第二版笔记

    python核心编程第二版笔记由网友提供:open168 python核心编程--笔记(很详细,建议收藏) 解释器options:1.1 –d   提供调试输出1.2 –O   生成优化的字节码(生成 ...

  8. python核心编程--笔记

    python核心编程--笔记 的解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找pyt ...

  9. Vegas Pro 15软件界面对比

    大家都知道Vegas是一款专业的视频制作软件,而新版的VEGAS Pro 15更是专业性十足.好了,废话不多说,接下来小编就带大家具体的看一下Vegas 15界面都有哪些更新吧! 一.软件图标 图1: ...

随机推荐

  1. SQL 约束 (Constraints)

    SQL 约束 约束用于限制加入表的数据的类型. 可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句). 我们将主要探讨以下几种约 ...

  2. 一 Struts2 开发流程

    SSH与SSM简介SSM:Spring+SpringMVC+MybatisSSH:Struts2+Hibernate+SpringStruts2:是侧重于控制层的框架Hibernate:是一个ORM( ...

  3. html基础和CSS选择器

    一.html简单基础 什么是HTML HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言: HyperText Markup Language HTML 不是一种编程语言,而是一种标 ...

  4. CentOS7.4使用KVM

    参考地址 [root@node1 ~]# cat /etc/centos-release CentOS Linux release 7.4.1708 (Core) [root@node1 ~]# un ...

  5. java获取真实的IP地址工具类

    在实际项目中,有调用微信支付完成支付功能,在微信支付的请求参数中需要传递一个本机的ip地址,java代码运行环境目前为windows10以及centos7. 以下为获取ip地址工具类: package ...

  6. 玩转PIL库

    1.安装pillow库: 在cmd下,输入简单的命令: pip install pillow  即可安装pillow库. 2.PIL库的简介: 1. PIL库主要有2个方面的功能: (1) 图像归档: ...

  7. Python @property 方法

    考察 Student 类: class Student(object): def __init__(self, name, score): self.name = name self.score = ...

  8. JS生成 UUID的方法

    方法一. function uuid() { var s = []; var hexDigits = "0123456789abcdef"; for (var i = 0; i & ...

  9. 第五章· Redis主从复制介绍

    一.Redis主从复制 二.Redis主从复制工作机制 一.Redis主从复制 Redis复制功能简单介绍 1)使用异步复制.2)一个主服务器可以有多个从服务器.3)从服务器也可以有自己的从服务器.4 ...

  10. JS自动微信消息轰炸

    打开网页版本微信,按f12,以console台 输入下边这段代码 setInterval(function(){$('.edit_area').html('需要发送的文字');$(".edi ...