day13,day14
day13
迭代器
什么是迭代器?
迭代:是一个重复的过程,每一次重复,都是基于上一次的结果而进行的
器:迭代取值的工具
为何要用迭代器?
迭代器提供了一种通用的不依赖于索引的迭代取值方式
如何用迭代器?
可迭代对象iterablie,但凡内置有__iter__方法的对象都称之为可迭代对象(str,list,tuple,dict,set,文件对象)
执行可迭代对象下的__iter__方法,返回的值就是一个迭代器对象。迭代器对象内置有__next__方法。
迭代器对象:
既内置有__next__方法的对象,又内置有__iter__方法的对象
注:
1、迭代器对象一定是可迭代的对象,而可迭代对象不一定是迭代器对象。
2、文件本身是一个迭代器对象
迭代器:
优:1、不依赖于索引的迭代取值方式
2、同一时刻在内存中只存在一个值,更节省内存
缺:1、取值不如按照索引和key的方式灵活(不能取指定的某一个值,而且只能往后取)
2、无法预测迭代器长度
day14
生成器:
一种自定义的迭代器
yield:
但凡函数内包含yield关键字,再去调用函数不会执行函数体代码,会得到一个返回值,该返回值就是生成器对象。
def func():
print('hello world')
yield #带有yield关键字的函数,这个关键字会暂停函数体代码,同时yield也具有return的效果能有一个返回值,只是他返回的是一个生成器对象
g = func() #此时函数体代码并不会运行,但是将变量g变成了一个生成器
next(g) #调用这个生成器g的next内置方法,会将生成器内的代码(也就是函数体代码)运行一次
#############################
def add(start,stop,step=1)
while start < stop:
yield start
start+=step
for i in add(1,10):
print(i)
这就是一个简单的range方法的实现
##############################
def dog(name)
print('%s,准备开吃'%name)
food = yield
print('%s吃了%s'%(name,food))
g = dog('sql')
next(g)
g.send('肉包子')
这是一个先把函数体代码暂停,再往函数体代码中传值的方式
#################################
生成器表达式:
[i**3 for i in range(1,10) if i > 5]
(i**3 for i in range(1,10) if i > 5)
这两行代码看起来很相似,但是第一行是我们之前所提到过的列表生成式,而第二行就是标题要说的生成器表达式,就是用()括起来的一系列表达式就是为生成器表达式
##################################
def len_file(address):
with open(r'%s'%address,mode = 'rt',encoding = 'utf-8') as f:
s = (len(i) for i in f)
print(sum(s))
这就一个将生成器表达式运用于来统计文件字符多少的例子,将生成器表达式和内置方法结合使用。
#####################################
面试题:
##################################
def add(n,i):
return n+i def test():
for i in range(4):
yield i g=test() #这g是一个是一个生成器
for n in [1,10]:
g=(add(n,i) for i in g) #(add(n,i) for i in g)这是一个生成器表达式
res=list(g)
#A. res=[10,11,12,13]
#B. res=[11,12,13,14]
#C. res=[20,21,22,23]
#D. res=[21,22,23,24]
第一次循环
n=1
g=(add(n,i) for i in g)
代码并没有执行
第二次循环:
此时(add(n,i) for i in g)中的g等于(add(n,i) for i in g)
所以第二次循环的g = (add(n,i) for i in g)这条代码其实真正的样子应该是 g=(add(n,i) for i in (add(n,i) for i in g))
再来分析
此时n=10 而且 list(g)使第二次循环代码可以运行
所以 将n带入(add(n,i) for i in g)这一条代码中
得出 10 再带入前面的代码 得出 n+10
所以正确答案为 C ######################################
面向过程编程
核心是过程二字,过程就是解决问题的步骤。
基于该思想编写的程序就好比在设计一条流水线,是一种机械式的思维方式。
优点:复杂的问题流程化,进而简单化
缺点:扩展性极差。
day13,day14的更多相关文章
- asp.net 操作Excel大全
asp.net 操作Excel大全 转:http://www.cnblogs.com/zhangchenliang/archive/2011/07/21/2112430.html 我们在做excel资 ...
- 报错:对象必须实现 IConvertible;以分隔符进行分割链接concat_ws的使用方法;mysql数据类型转换cast,convert
错误故障,mysql 服务器上用 concat_ws 函数,连接了一串数字,最后 服务器返回的字段就变成了一个 byte ,而我们想要的类型是 string 类型,那么转换的时候,就报错了. 正确 ...
- Go开发之路(目录)
知识点 1. Go语言 简介 2. Go语言 基本语法 3. Go语言 strings以及strconv的使用 4. Go语言 时间和日期类型 5. Go语言 指针类型 6. Go语言 流程控制 7. ...
- C#操作excel(多种方法比较)
1.用查询表的方式查询并show在数据集控件上. public static string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; D ...
- Django 多个字段关联同一外键
# -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community b ...
- os模块补充以及序列化模块
os模块补充以及序列化模块 一.os模块的补充 1.os.path.abspath 能把存在的相对路径的绝对路径显示出来 path = os.path.abspath("连达day19. ...
- 【JAVA零基础入门系列】Day13 Java类的继承与多态
继承是类的一个很重要的特性,什么?你连继承都不知道?你是想气死爸爸好继承爸爸的遗产吗?(滑稽) 开个玩笑,这里的继承跟我们现实生活的中继承还是有很大区别的,一个类可以继承另一个类,继承的内容包括属性跟 ...
- 【JAVA零基础入门系列】Day14 Java对象的克隆
今天要介绍一个概念,对象的克隆.本篇有一定难度,请先做好心理准备.看不懂的话可以多看两遍,还是不懂的话,可以在下方留言,我会看情况进行修改和补充. 克隆,自然就是将对象重新复制一份,那为什么要用克隆呢 ...
- python_way day14 CSS
python_way day14 CSS 层叠样式表 一.CSS作用域: 二.css标签选择器 三.css样式 一.css作用域: 基本用法:style="样式" <body ...
随机推荐
- sublime3 常用快捷键
轻量级编辑器,一直用的sublime text3 , 可以根据自己喜好安装喜欢的风格插件,根据工作需求安装代码处理插件. 下一章将推荐我常用的一些风格与代码插件 这里记录一些sublime 常用的快捷 ...
- 原生css 中变量的使用
前两天看到阮大神的一篇在css中使用变量的文章,整理了一下. 这个重要的 CSS 新功能,所有主要浏览器已经都支持了.本文全面介绍如何使用它,你会发现原生 CSS 从此变得异常强大. 一.变量的声明 ...
- ajax请求json数据跨域问题(转)
一.后台代理技术 由服务器端向跨域下的网站发出请求,再将请求结果返回给前端,成功避免同源策略的限制. 具体操作如下: 1.在localhost:81/a.html中,向同源下的某个代理程序发出请求 $ ...
- Silverlight提示“Load 操作失败。远程服务器返回了错误: NotFound”
调试时出现“Load 操作失败.远程服务器返回了错误: NotFound”: 一定要注意此错误之前的错误是什么?基本就是用户Cookie的问题,用户没有登录. 有时需要设置成Any CPU 有时重新编 ...
- Windows10+VS2017 用GLFW+GLAD 搭建OpenGL开发环境
本文参考:https://learnopengl-cn.github.io/ 一 下载GLFW(https://www.glfw.org/download.html) 和 GLAD(https:// ...
- beego快速入门
beego的官方网址:https://beego.me 参考文档:https://beego.me/quickstart 1:安装 您需要安装 Go 1.1+ 以确保所有功能的正常使用. 需要已经设置 ...
- java io详解(1)
一.java io结构图 二.java io的开始:文件 三.字节流: 一.java io结构图 流分类: 1.Java的字节流 InputStream是所有字节输入流的祖先,而OutputSt ...
- SqlServer数据库设计一个字段的值是由其他字段运算结果所得
最近在做项目时,发现数据库的一些字段不能执行sql语句进行修改,仔细观察才发现,它是由其他字段运算结果所得.这样就不需程序员通过代码执行运算结果更新数据库,感觉很实用,而网上教材好像还挺少的,所以把教 ...
- python自学——文件处理(截取文件内容)
#截断文件内容使用的函数为truncate()来截断文件中的内容# 注意当truncate()括号内没有定义对象时则会删除文件内容:当括号内为指定某个条件时文件会截取从0到指定位置的内容f=open( ...
- 对EJB2.1几种接口的认识
因为教学上的需要,重新梳理了下EJB几种接口的职能,讲的是EJB3,虽然按照课件也能做出一个运行良好的EJB程序来,但是要想比较好的理解EJB3的工作原理,只知道这些注解还是不够的,特别是涉及到的接口 ...