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: ...
随机推荐
- vim之快速查找功能
vim有强大的字符串查找功能. 我们通常在vim下要查找字符串的时候, 都是输入 / 或者 ? 加 需要查找的字符串来进行搜索,比如想搜索 super 这个单词, 可以输入 /super 或者 ...
- 20145236《网络对抗》进阶实验——64位Ubuntu 17.10.1 ROP攻击
20145236<网络对抗>进阶实验--64位Ubuntu 17.10.1 ROP攻击 基础知识 ROP攻击 ROP全称为Retrun-oriented Programmming(面向返回 ...
- 监控redis
[4ajr@redis1 scripts]$ cat redismonitor.sh #!/bin/bash #想要什么监控项再添加 rediscli="/soft/redis/bin/re ...
- HBase原理分析
宏观架构 HBase从宏观上看只有HMaster.RegionServer和zookeeper三个组件. Master: 负责启动的时候分配Region到具体的RegionServer,执行各种管理操 ...
- Linux内存管理 (8)malloc
专题:Linux内存管理专题 关键词:malloc.brk.VMA.VM_LOCK.normal page.special page. 每章问答: malloc()函数是C函数库封装的一个核心函数,对 ...
- 第三章 启动rabbitmq的webUI
一.启动步骤 1.启动rabbitmq rabbitmq-server (前台启动)或者rabbitmq-server -detached(后台启动) 2.启动rabbitmq_management ...
- spring+struts2+hibernate框架搭建(Maven工程)
搭建Spring 1.porm.xml中添加jar包 <!-- spring3 --> <dependency> <groupId>org.springframew ...
- Elasticsearch 通关教程(三): 索引别名Aliases问题
业务问题 业务需求是不断变化迭代的,也许我们之前写的某个业务逻辑在下个版本就变化了,我们可能需要修改原来的设计,例如数据库可能需要添加一个字段或删减一个字段,而在搜索中也会发生这件事,即使你认为现在的 ...
- 04 Django REST Framework 认证、权限和限制
目前,我们的API对谁可以编辑或删除代码段没有任何限制.我们希望有更高级的行为,以确保: 代码片段始终与创建者相关联. 只有通过身份验证的用户可以创建片段. 只有代码片段的创建者可以更新或删除它. 未 ...
- VS2010创建MVC4项目提示错误: 此模板尝试加载组件程序集 “NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral,
在安装VS2010时没有安装MVC4,于是后面自己下载安装了(居然还要安装VS2010 SP1补丁包).装完后新建MVC项目时却提示: 错误: 此模板尝试加载组件程序集 “NuGet.VisualSt ...