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.pswp.cn/news/453974.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453974.shtml
英文地址,請注明出處:http://en.pswp.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…