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…

用线性插值算法实现图像缩放

用线性插值算法实现图像缩放 猛禽[Mental Studio](个人专栏)(BLOG) http://mental.mentsu.com 在Windows中做过图像方面程序的人应该都知道Windows的GDI有一个API函数:StretchBlt,对应在VCL中是TCanvas类的StretchDraw方法。它可以很简单地实现图像的缩放…

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

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

深度学习案例之基于 CNN 的 MNIST 手写数字识别

一、模型结构 本文只涉及利用Tensorflow实现CNN的手写数字识别,CNN的内容请参考:卷积神经网络(CNN) MNIST数据集的格式与数据预处理代码input_data.py的讲解请参考 :Tutorial (2) 二、实验代码 # -*- coding:utf-8 -*- """Time : Author: Feng LepengFile …

怎样获取linux命令帮助?

获得命令使用帮助:内部命令:help COMMAND外部命令:COMMAND --help (大多数命令有help选项)命令手册:manualman [章节号] COMMAND其中man数据库是分章节的,相同的COMMAND出现在不同的章节表示…

编译安装 zbar 时两次 make 带来的惊喜

为了装 php 的条形码扩展模块 php-zbarcode,先装了一天的 ImageMagick 和 zbar。也许和我装的 Ubuntu 17.10 的有版本兼容问题吧,总之什么毛病都有,apt 不行,PPA 源也不行,编译安装还有几处源代码出错,装不…

python数组的乘法_在Python中乘法非常大的2D数组

我必须在Python中将非常大的2D数组乘以大约100次.每个矩阵由3200032000元素组成.我正在使用np.dot(X,Y),但是每次乘法都需要很长时间…在我的代码实例下面:import numpy as npX Nonefor i in range(100)multiplying Trueif X None:X generate_large_2darray()mu…

0阶指数哥伦布编码

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

TensorFolw 报错

1、报错1&#xff1a;ValueError: Only call softmax_cross_entropy_with_logits with named arguments (labels..., logits..., ...) 提示出错如下&#xff1a; Traceback (most recent call last):File "/MNIST/softmax.py", line 12, in <module>cross_en…

CentOS7种搭建FTP服务器

安装vsftpd 首先要查看你是否安装vsftp [rootlocalhost /]# rpm -q vsftpd vsftpd-3.0.2-10.el7.x86_64 #显示也就安装成功了&#xff01; 如果没有则安装vsftpd [rootlocalhost/]# yum install -y vsftpd 完成后再检查一遍 [rootlocalhost /]# whereis vsftpd vsf…

js循环

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

x264函数调用关系图

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

Tensorflow 加载预训练模型和保存模型

使用tensorflow过程中&#xff0c;训练结束后我们需要用到模型文件。有时候&#xff0c;我们可能也需要用到别人训练好的模型&#xff0c;并在这个基础上再次训练。这时候我们需要掌握如何操作这些模型数据。看完本文&#xff0c;相信你一定会有收获&#xff01; 一、Tensorfl…

在 ActiveReports 中嵌入 Spread 控件

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

sort()函数、C++

Sort&#xff08;&#xff09;函数是c一种排序方法之一&#xff0c;它使用的排序方法是类似于快排的方法&#xff0c;时间复杂度为n*log2(n) &#xff08;1&#xff09;Sort函数包含在头文件为#include<algorithm>的c标准库中。 II&#xff09;Sort函数有三个参数&#x…

python waitkey_python中VideoCapture(),read(),waitKey()的使用

有以下程序import cv2cap cv2.VideoCapture(0)while cap.isOpened():ret,frame cap.read()cv2.imshow(frame,frame)c cv2.waitKey(1)if c 27:breakcap.release()cv2.destroyAllWindows()说明&#xff1a;程序段里&#xff0c;1、cv2.VideoCapture()函数&#xff1a;cap cv…

深度学习案例之 验证码识别

本项目介绍利用深度学习技术&#xff08;tensorflow&#xff09;&#xff0c;来识别验证码&#xff08;4位验证码&#xff0c;具体的验证码的长度可以自己生成&#xff0c;可以在自己进行训练&#xff09; 程序分为四个部分 1、生成验证码的程序&#xff0c;可生成数字字母大…

windows下使用pthread库

最近在看《C多核高级编程》这本书&#xff0c;收集了些有用的东西&#xff0c;方便在windows下使用POSIX标准进行Pthread开发&#xff0c;有利于跨平台。 -------------------------------------------------- windows下使用pthread库时间:2010-01-27 07:41来源:罗索工作室 作…

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

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

python数值计算guess_【python】猜数字game,旨在提高初学者对Python循环结构的使用...

import random #引入生成随机数的模块需求&#xff1a;程序设定生成 1-20 之间的一个随机数&#xff0c;让用户猜日期&#xff1a;2019-10-21作者&#xff1a;xiaoxiaohui目的&#xff1a;猜数字game&#xff0c;旨在提高初学者对Python 变量类型以及循环结构的使用。secretNu…