day13 迭代器和生成器

一、上节回顾和作业讲解:

1、如果这个网页没有被爬取过就真的去访问这个网页,否则就返回之前访问的时候缓存文件中的内容

(重要的例子)

from urllib.request import urlopen
def wrapper(func):def inner(*args, **kwargs):with open("web","rb") as f:web_content=f.read()if not web_content:web_content = func(*args, **kwargs)with open("web","wb") as f:f.write(web_content)return web_contentreturn inner
@wrapper
def get_url(url):content=urlopen(url).read()return content
web_content=get_url("http://www.cnblogs.com/number1994/p/7941399.html")
print(web_content)
网页爬取和缓存

2、回顾

装饰器:  在不修改一个函数的调用方式的前提下载一个函数的前后添加功能

装饰器的本质:闭包函数

@wrapper      #get_url=wrapper(get_url)

def get_url(url):

  content=urlopen(url).read()

  return content

login :了解原理 

flag=False
def login(func):def inner(*args, **kwargs):global flagif flag==False:name=input("用户名:")password=input("密码:")if name=="liu" and password=="123":print("登录成功!")flag=Trueif flag==True:ret=func(*args,**kwargs)return retreturn inner
@login
def art():print("欢迎登录文章页")
def dar():print("欢迎登录日志页")
art()
dar()
login登录

log  :必须会:写到文件里

def log(func):def inner(*args,**kwargs):print("你要调用%s函数了"%func.__name__)ret=func(*args,**kwargs)return retreturn inner
@log
def f1():print("f1")
@log
def f2():print("f2")
f1()
f2()
log

web_content :进阶要求

二、今日内容:

1、可迭代的:__inter__

  列表 字典 元祖 字符串 集合

  iterable  :可迭代的

  判断是否是可迭代的:内部含有__iter__方法的数据类型是可迭代的  ——可迭代协议

print("__iter__"in dir([]))  #True

2、迭代器:__iter__  和__next__  (包含next方法的可迭代对象就是迭代器)

  iterator   :迭代器

  迭代器你可以理解为一个容器,我们从这个容器当中一个接着一个的把值取出来的过程就是迭代的过程

lst_iter=[1,2,3,4,5]
                    #判断类型
print("__iter__"in dir(lst_iter)) #True print("__next__"in dir(lst_iter)) #False
lst_iter=lst_iter.__iter__() #将可迭代的转换为迭代器
print("__iter__"in dir(lst_iter)) #True print("__next__"in dir(lst_iter)) #True

print(lst_iter.__next__()) #1 迭代循环 print(lst_iter.__next__()) #2

3、总结:

  (1)可迭代的必须含有__iter__方法      #可迭代协议

  (2)迭代器比可迭代的多一个__next__方法

  (3)迭代器:包含__next__,__iter__方法    #迭代器协议

  (4)包含__next__方法的可迭代对象就是迭代器

  (5)迭代器是可迭代的一部分,也就是可迭代的包含迭代器

  #获得迭代器:可迭代的.__iter__()

  #使用迭代器:迭代器.__next__()

4、迭代器的工作原理

  #惰性运算  从前到后依次取值,过程不可逆 不可重复

  #节省内存

print("__iter__"in dir(range(10)))  #True
print("__neat__"in dir(range(10)))  #False
range_iter=range(10).__iter__()  #转换为迭代器
print(range_iter.__next__())     #0  迭代取值
print(range_iter.__next__())      #1  迭代取值

5、用while模拟for循环

(1)for 循环是依赖迭代器的

(2)for循环是让我们更简单的使用迭代器

(3)用迭代器取值不需要关心索引或者Key的取值问题

l=[1,2,3,4,5]
l_iter=l.__iter__()       #将可迭代的转换为迭代器
while True:try:print(l_iter.__next__())except StopIteration:break

 6、generator  ------生成器

  最简单的生成器:生成器函数和普通函数之间的区别

       (1)生成器函数中含有yield关键字

  (2)生成器函数调用时不会立即执行,而是返回一个生成器

def g_func():yield 1
g=g_func()
print(g.__next__())
#1

7、生成器函数(重要例子)衣服调用

def cloth():for i in range(1000):yield "衣服%s"%i
g=cloth()
for i in range(50):print(g.__next__())
for i in range(50):print(g.__next__())

 

转载于:https://www.cnblogs.com/number1994/p/7955178.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453974.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Centos7.0 搭建Zabbix环境

实验环境:Centos7.0IP:192.168.47.140关闭iptables及setenforce导入源 rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm安装zabbix包安装完成安装mysql源wget http://repo.mysql.com/mysql-community-release-el7-5…

蒙特卡洛分析 pmp_PMP基础名词介绍 | 59. 实施定量风险分析

点击上方蓝字关注我们你好,这是“兔子研习社”为管理新手推出的“PMP基础名词介绍”系列内容。如果你正打算转到管理岗位,或者想要学习国际通行的项目管理知识,那恭喜你,这里满满的干货会让你不虚此行。实施定量风险分析是就已识别…

0阶指数哥伦布编码

指数哥伦布编码 规定语法元素的编解码模式的描述符如下: 比特串: b(8):任意形式的8比特字节(就是为了说明语法元素是为8个比特,没有语法上的含义) f(n):n位固定模式比特串(其值固定,如forbidde…

js循环

顺序——要加分号结束 分支:让程序根据条件不同执行不同的代码 if else语句用来做分支的 if(条件){代码} if(条件){代码}else{代码} else if(条件){代码} if是嵌套。 switch...case&#xff1…

x264函数调用关系图

1 encoder 2 slice write 3 analyse FFMPEG中MPEG-2编解码函数调用关系图 1 Encoder (函数调用从左到右,下同;图片显示不全时,请下载显示) 2 P帧运动估计流程图 3 B帧运动估计流程图 4 decoder ffmpeg的mpeg2编码I帧代…

在 ActiveReports 中嵌入 Spread 控件

Spread 是一款很出色的表格控件,Spread 可以使开发人员把具有兼容 Microsoft Excel 的电子表格添加到程序中。ActiveReports 提供了一个非常灵活的、简单的报表环境。下面将展示怎样在 ActiveReports 中使用 Spread for WinForm。和其他三方控件一样,Spr…

day 05 多行输出与多行注释、字符串的格式化输出、预设创建者和日期

msg"hello1 hello2 hello3 " print(msg) 显示结果为: # " "只能进行单行的字符串 多行字符串用 ,前面设置变量,可以用 表示多行 msghello1 hello2 hello3print(msg) 显示结果为: 当然如果没有设置变量,…

深度学习之循环神经网络(Recurrent Neural Network,RNN)

递归神经网络和循环神经网络 循环神经网络(recurrent neural network):时间上的展开,处理的是序列结构的信息,是有环图递归神经网络(recursive neural network):空间上的展开&#…

从北京回来的年轻人,我该告诉你点什么?

前言 就在上周末,我与公众号里的一个当地粉丝见面了,一起吃了顿饭,顺便聊了聊。先来简单交代下我们这位粉丝(以下简称小L)的经历以及诉求。 小L之前在北京八维研修学院培训的PHP,因为家庭原因,没…

SUSE12系统安装及LVM设置详解

SUSE12自定义安装跟以往版本差不多,只是调整了一些功能安装顺序,例如网络设置放到很靠前,SUSE11的时候几乎是在后半部分,自定义分区也调整到网络设置之后,入口设置也隐秘,如果是熟悉suse11安装,…

CentOS7 安装nginx

1、官网下载安装包 官网:http://nginx.org/en/download.html 选择适合Linux的版本,这里选择最新的版本,下载到本地后上传到服务器或者centos下直接wget命令下载。 切换到/usr/local目录,下载软件包 # cd /usr/local # wget htt…

【Hibernate框架开发之九】Hibernate 性能优化笔记!(遍历、一级/二级/查询/缓存/乐观悲观锁等优化算法)...

1. 循环分页或者循环进行部分读取处理数据的时候,使用 session.clear() ; 2. 对应1N(N1)问题使用如下解决方式: 1): 使用createCriteria进行查询(join fetch) 2):HQL -> joi…

最新ffmpeg编译和用eclipse进行源码调试

最近由于项目需要,必须修改ffmpeg的源码进行修改才能满足项目的需求,但以前我从来没有自己去编译和使用ffmpeg的源代码,一直都是用别人编译好了的sdk,再加上习惯了vs方便的编译环境,要在linux下对如此多的源代码进行编…

Django补充知识点——用户管理

内容概要 1、Form表单2、Ajax3、布局,Django母板4、序列化5、Ajax相关6、分页7、XSS攻击8、CSRF9、CBV、FBV 10、类中用装饰器的两种方法 11、上传文件 12、数据库正向查询、反向查询、多对多查询 13、jQuery对象和DOM对象可以互相转换 14、cookie和session 用户管理…

Python html 代码转成图片、PDF

一、下载 1、python的imgkit、pdfkit库 pip install imgkit pip install pdfkit 2、wkhtmltopdf工具包 下载地址:https://wkhtmltopdf.org/downloads.html 下载之后安装,安装完成会生成两个程序,分别用来转图片和pdf: 二、使…

SpringEL expression:

2019独角兽企业重金招聘Python工程师标准>>> 这个异常有下面几种情况 1、你写的 EL 表达式有语法错误。 2、再者就是你取得变量是多级的话比如 student.address.prevince 属性model 关联有问题。 3、还有就是你取得值为空(null) 比如 Thymel…

利用qt和ffmpeg软件来制作视频裁剪工具

0 什么是ffmpeg? Libav(旧称:FFmpeg)是一个自由软件,可以运行音频和视频多种格式的录影、转档、流功能[1],包含了libavcodec ─这是一个用于多个专案中音频和视频的解码器库,以及 libavformat ——一个音频…

域添加另一台机器_巨杉Tech | SequoiaDB数据域概念解读与实践

近年来,银行各项业务发展迅猛,客户数目不断增加,后台服务系统压力也越来越大,系统的各项硬件资源也变得非常紧张。因此,在技术风险可控的基础上,希望引入大数据技术,利用大数据技术优化现有IT系…

推荐一个接口文档工具

ShowDoc 转载于:https://www.cnblogs.com/LW-baiyun/p/8003975.html

云计算的概念_云计算概念掀起涨停潮 美利云奠定板块龙头地位

温馨提示:股市风险时刻存在,文中所提个股仅为个人观点,请勿盲目跟随操作,笔者希望大家都做到不贪婪,不恐惧,不瞎猜,不跟风做一个纪律严明轻松淡定的股票交易者。社4月26日讯,沪深两市…