day 14 - 2 生成器练习
相关练习
1、处理文件,用户指定要查找的文件和内容,将文件中包含要查找内容的每一行都输出到屏幕
- #比较 low 的方法
- def check_file(filename,aim):
- with open(filename,encoding='utf-8') as f: #句柄 : handler,文件操作符,文件句柄
- for line in f:
- if aim in line:
- print(line.strip())
- check_file('E:/py/log/log.txt','add')
- #生成器实现
- def check_file(filename,aim):
- with open(filename,encoding='utf-8') as f: #句柄 : handler,文件操作符,文件句柄
- for line in f:
- if aim in line:
- yield line
- g = check_file('E:/py/log/log.txt','add')
- for i in g:
- print(i.strip())
2、写生成器,从文件中读取内容,在每一次读取到的内容之前加上 ‘ *** ’ 之后再返回给用户。
- def check_file(filename):
- with open(filename,encoding='utf-8')as f:
- for i in f:
- yield '***'+i.strip()
- #g = check_file("E:/py/log/log.txt")
- #for i in g:
- # print(i)
- #也可以这样写
- for i in check_file("E:/py/log/log.txt"):
- print(i)
加上行号
- def dir(url):
- with open(url,encoding='utf-8')as f:
- for index,i in enumerate(f,1):
- yield "*%s* "%index + i.strip()
- d = dir('E:/py/log/log.txt')
- for i in d:
- print(i)
面试题
生成器相关的面试题
for 循环套生成器表达式的题,就把 for 循环拆开
题一:阅读下面代码,print 打印的结果是什么?
- def demo():
- for i in range(4):
- yield i
- g=demo()
- g1=(i for i in g)
- g2=(i for i in g1)
- #print(list(g)) #list() 字符串强转
- print(list(g1)) #[0, 1, 2, 3]
- print(list(g2)) #[]
- #为什么 list(g2) 中会是空呢?
- #因为:g1 里面的值已经悉数给到 list() 当 g2 在找 g1 要值时,g1 已经没值了 所以 g2 返回为空
题二:阅读下面代码,print 打印的结果是什么?
- def add(n,i):
- return n+i
- def test():
- for i in range(4):
- yield i
- g=test()
- for n in [1,10,5]:
- g=(add(n,i) for i in g)
- print(list(g)) #[15,16,17,18]
- """
- #把以上的 for 循环拆开 在 g 这个未知数换成已知的
- ###很重要的一点 当 n=1,n=10 的时候,程序并没有执行,只是做了赋值的工作,就过去了
- ###那程序是什么时候开始取值的呢?在 list(g) 的时候才执行,这是时候的 n 就是最后一个 n 了
- ###前面的 n 已经消失了
- n = 1
- g=(add(n,i) for i in g) #g=test()
- n = 10
- g=(add(n,i) for i in g) #g=(add(n,i) for i in test()))
- n = 5
- g=(add(n,i) for i in g) #g=(add(n,i) for i in (add(n,i) for i in test())))
- #组合起来就是
- n = 1
- g=(add(n,i) for i in test())
- n = 10
- g=(add(n,i) for i in (add(n,i) for i in test()))
- n = 5
- g=(add(n,i) for i in add(n,i) for i in (add(n,i) for i in test()))
- #结果为:g=[15,16,17,18]
- """
day 14 - 2 生成器练习的更多相关文章
- IntelliJ IDEA 14 注册码生成器
IntelliJ IDEA 14 注册码生成器 文件为Java代码 自己编译运行里面的程序输入名称然后就生成注册码了工具:http://yun.baidu.com/s/1cZKsA部分工具生成的注册码 ...
- day 14 - 1 生成器
生成器 生成器 生成器的本质就是迭代器生成器的表现形式 生成器函数 生成器函数 —— 本质上就是我们自己写得函数 生成器表达式生成器函数: 含有 yield 关键字的函数就是生成器函数 特点: 调用函 ...
- Python基础(生成器)
二.生成器(可以看做是一种数据类型) 描述: 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我 ...
- Python2.4-原理之函数
此节来自于<Python学习手册第四版>第四部分 一.函数基础 函数的作用在每个编程语言中都是大同小异的,,这个表是函数的相关语句和表达式. 1.编写函数,a.def是可执行代码,pyth ...
- WinForm GDI+自定义控件总结(一)
前言 由于项目的原因好久没写博客了,也正是项目的原因开始系统的学习WinForm,从而接触到自定义控件的开发.自定义控件的开发有一定的难度,对开发者要求比较高,需要了解Windows运行的机制,熟悉w ...
- (转)用AGG实现高质量图形输出(三)
转自 :http://www.cnblogs.com/CoolJie/archive/2011/04/27/2030260.html 线段生成器(Span Generator) 我们前面举的例子使用的 ...
- python核心编程第二版笔记
python核心编程第二版笔记由网友提供:open168 python核心编程--笔记(很详细,建议收藏) 解释器options:1.1 –d 提供调试输出1.2 –O 生成优化的字节码(生成 ...
- python核心编程--笔记
python核心编程--笔记 的解释器options: 1.1 –d 提供调试输出 1.2 –O 生成优化的字节码(生成.pyo文件) 1.3 –S 不导入site模块以在启动时查找pyt ...
- Vegas Pro 15软件界面对比
大家都知道Vegas是一款专业的视频制作软件,而新版的VEGAS Pro 15更是专业性十足.好了,废话不多说,接下来小编就带大家具体的看一下Vegas 15界面都有哪些更新吧! 一.软件图标 图1: ...
随机推荐
- SQL 约束 (Constraints)
SQL 约束 约束用于限制加入表的数据的类型. 可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句). 我们将主要探讨以下几种约 ...
- 一 Struts2 开发流程
SSH与SSM简介SSM:Spring+SpringMVC+MybatisSSH:Struts2+Hibernate+SpringStruts2:是侧重于控制层的框架Hibernate:是一个ORM( ...
- html基础和CSS选择器
一.html简单基础 什么是HTML HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言: HyperText Markup Language HTML 不是一种编程语言,而是一种标 ...
- CentOS7.4使用KVM
参考地址 [root@node1 ~]# cat /etc/centos-release CentOS Linux release 7.4.1708 (Core) [root@node1 ~]# un ...
- java获取真实的IP地址工具类
在实际项目中,有调用微信支付完成支付功能,在微信支付的请求参数中需要传递一个本机的ip地址,java代码运行环境目前为windows10以及centos7. 以下为获取ip地址工具类: package ...
- 玩转PIL库
1.安装pillow库: 在cmd下,输入简单的命令: pip install pillow 即可安装pillow库. 2.PIL库的简介: 1. PIL库主要有2个方面的功能: (1) 图像归档: ...
- Python @property 方法
考察 Student 类: class Student(object): def __init__(self, name, score): self.name = name self.score = ...
- JS生成 UUID的方法
方法一. function uuid() { var s = []; var hexDigits = "0123456789abcdef"; for (var i = 0; i & ...
- 第五章· Redis主从复制介绍
一.Redis主从复制 二.Redis主从复制工作机制 一.Redis主从复制 Redis复制功能简单介绍 1)使用异步复制.2)一个主服务器可以有多个从服务器.3)从服务器也可以有自己的从服务器.4 ...
- JS自动微信消息轰炸
打开网页版本微信,按f12,以console台 输入下边这段代码 setInterval(function(){$('.edit_area').html('需要发送的文字');$(".edi ...