迭代器生成器yield總結(jié)(python小白登天日記)

看了一天的驗(yàn)證碼處理的問題,發(fā)現(xiàn)現(xiàn)在的驗(yàn)證碼實(shí)在是太復(fù)雜了,我給跪了!主要之前從來沒做過圖片處理的問題,就是有也是公司直接接別人家的接口,我甚至只需要傳到我們自己的服務(wù)器,我們后臺(tái)跟它們?nèi)?duì)接。

想了一下,既然驗(yàn)證碼暫時(shí)應(yīng)該研究不到,不如跳回之前寫的爬取圖片的爬蟲身上繼續(xù)研究吧,這次不上代碼了,因?yàn)槲覜]寫??

主要是想加快運(yùn)行速度

畢竟有很多圖片等著程序去處理,而程序的運(yùn)行速度并不盡人意,而且今后如果深入研究的話,肯定會(huì)做大型的數(shù)據(jù)處理,所以我就跑去查python的多線程了- -

協(xié)程

查了一下發(fā)現(xiàn)并沒有多線程啊,應(yīng)該是協(xié)程(摘自維基百科)
<a><blockquote>與子例程一樣,協(xié)程也是一種程序組件。相對(duì)子例程而言,協(xié)程更為一般和靈活,但在實(shí)踐中使用沒有子例程那樣廣泛。協(xié)程源自SimulaModula-2語言,但也有其他語言支持。協(xié)程更適合于用來實(shí)現(xiàn)彼此熟悉的程序組件,如合作式多任務(wù)迭代器無限列表管道。</blockquote></a>

生成器

其實(shí)上面協(xié)程的定義不看也無所謂了,因?yàn)閜ython里面的協(xié)程可以說就是生成器。
生成器是什么東西呢?
首先,咱們說一下迭代器和可迭代對(duì)象
什么是可迭代對(duì)象?很好理解,可以被迭代的對(duì)象就是可迭代對(duì)象。
在程序里面的判斷就是能用for迭代的:
<blockquote>有些同學(xué)可能還不理解迭代和遍歷的區(qū)別,我在這稍微解釋以下,迭代就是把一個(gè)<b>線性結(jié)構(gòu)</b>的每一個(gè)數(shù)據(jù)元素找出來,線性結(jié)構(gòu)就是一個(gè)有序數(shù)據(jù)元素的集合。非線性結(jié)構(gòu):不是在一個(gè)線性數(shù)列中,每個(gè)元素與其他0或多個(gè)數(shù)據(jù)元素有聯(lián)系。而遍歷就是把非線性結(jié)構(gòu)的元素一個(gè)個(gè)找出來。</blockquote>

而迭代器就是有next()方法的,既然有next()方法了,我認(rèn)為其實(shí)就是一個(gè)生成器了。
生成器還有一個(gè)標(biāo)志:yield。
如果一個(gè)普通的函數(shù)不用return,而是用了yield,那說明這個(gè)函數(shù)就是一個(gè)生成器了。

那生成器是干啥的呢?加快運(yùn)行速度。
舉個(gè)例子來說,過年了,你媽媽在包水餃(也不知道你爸爸干啥去了),你在等著給媽媽下水餃,然后正常的流程是這樣的:
包水餃--->等著包完--->包了一大盆--->下水餃---->開始吃。

如果你媽媽一直在包水餃怎么辦?比如她想囤糧食(想瞎了我的心了),家里的盆放不開了啊,而且包太多的話,鍋也煮不開啊,怎么辦?
咱們把你媽媽包水餃的過程視作一個(gè)函數(shù),然后每包完一個(gè)水餃,后面加一個(gè):
<code>yield 你媽媽包的水餃</code>
這時(shí)候流程就變樣子了:你媽媽每包一個(gè)水餃,她就讓你去下水餃
這樣,根本都用不到盆!!!!!從今往后家里省下了買盆的錢,然后用這個(gè)錢買了彩票,然后中獎(jiǎng)了,然后你就走向了人生巔峰~

也就是說,每當(dāng)我需要用到當(dāng)前需要的數(shù)據(jù)時(shí),我才會(huì)讓生成器生成一條數(shù)據(jù),不用的話就讓生成器掛在那,他也不會(huì)重新運(yùn)行,再用到的時(shí)候接著上次的繼續(xù)運(yùn)行,這樣對(duì)內(nèi)存和運(yùn)行速度進(jìn)行了非常大的優(yōu)化。

最后掛一句話,是看的國(guó)外作者被翻譯過來的:

以前函數(shù)只有一次返回結(jié)果的機(jī)會(huì)(return),而且一次必須返回所有的結(jié)果。而生成器呢?沒想到吧!!隨便你操作了!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容