摘要:迭代器可以直接作用于循環(huán)的對象統(tǒng)稱為可迭代對象。可以被函數(shù)調(diào)用并不斷返回下一個值的對象稱為迭代器。這個高階函數(shù),關(guān)鍵在于正確實現(xiàn)一個篩選函數(shù)。
又是日常嘮嗑的一小段
真的是非常話嘮的在下,日常給自己打點雞血吧。
昨晚和老媽聊了一整晚,所以昨天并沒有更新。
然后因為很快要開始算個稅減免的部分,對于溫飽線的在下而言,其實減免的可能就只是奶茶錢吧。
工作的本質(zhì)是賺錢,我也很想在30歲之前完成財務(wù)自由。
所以要更加努力的賺錢錢,想變成自由職業(yè)者(我媽最看不上的那種),然后盡可能的獨立吧。無論是財務(wù)還是心理,還是有點太軟弱了。
當(dāng)你覺得辛苦的時候,那就是你在變好的時候!
列表生成式上一次學(xué)到Python的高級特性,迭代不同于其他語言的for循環(huán)中的下標(biāo)循環(huán)。雖然python也提供了相應(yīng)的方式,但是精簡才是python的精髓。
列表生成式即List Comprehensions,是Python內(nèi)置的非常簡單卻強大的可以用來創(chuàng)建list的生成式。
列表生成式-->將生成式放在for循環(huán)前,然后for循環(huán)之后還可以加入if判斷(真的是相當(dāng)?shù)暮唵未直┝?/strong>,是一個用方括號的朋友,畢竟是可以從一個list到另一個list。
原來需要用循環(huán)處理的問題,現(xiàn)在用一句簡單的生成式代碼解決。
看廖大神的例子,還可以雙重循環(huán),可以生成全排列。
[m + n for m in "ABC" for n in "XYZ"] ["AX", "AY", "AZ", "BX", "BY", "BZ", "CX", "CY", "CZ"]
for循環(huán)其實可以同時使用兩個甚至多個變量,比如dict的items()可以同時迭代key和value
列表生成式也可以使用兩個變量來生成list
做個作業(yè)
生成器在Python中,這種一邊循環(huán)一邊計算的機制,稱為生成器:generator。
這樣就不必創(chuàng)建完整的list,從而節(jié)省大量的空間。
創(chuàng)建生成器的辦法有很多。
把列表生成的[]改成(),就創(chuàng)建了一個generator。
如果要打印g的內(nèi)容,只能用next()函數(shù),獲得下一次的返回值。
generator保存的是算法,每次調(diào)用next(g),就計算出g的下一個元素的值,直到計算到最后一個元素,沒有更多的元素時,拋出StopIteration的錯誤。
但是正常來說,我們還是使用for循環(huán)來進行打印,這樣不需要調(diào)用next()函數(shù),也不需要關(guān)心StopInteration的錯誤。
generator非常強大。如果推算的算法比較復(fù)雜,用類似列表生成式的for循環(huán)無法實現(xiàn)的時候,還可以用函數(shù)來實現(xiàn)。
比如,斐波那契數(shù)列(我還挺喜歡這個名字的,蜜汁...)
def fib(max): n, a, b = 0, 0, 1 while n < max: print(b) a, b = b, a + b n = n + 1 return "done" #用函數(shù)進行打印
此處的賦值語句要注意。
a, b = b, a + b
相當(dāng)于
t = (b, a + b) # t是一個tuple a = t[0] b = t[1]
不必顯式寫出臨時變量t就可以賦值。
此處的fib()函數(shù)邏輯非常類似generator,此時將print(b)改成yield b就可以把函數(shù)變成生成器。
yield關(guān)鍵詞很重要,是變成generator的關(guān)鍵。
generator和函數(shù)的執(zhí)行流程不一樣。函數(shù)是順序執(zhí)行,遇到return語句或者最后一行函數(shù)語句就返回。而變成generator的函數(shù),在每次調(diào)用next()的時候執(zhí)行,遇到y(tǒng)ield語句返回,再次執(zhí)行時從上次返回的yield語句處繼續(xù)執(zhí)行。
楊輝三角的作業(yè)后面補上,算法真的是硬傷。
迭代器可以直接作用于for循環(huán)的對象統(tǒng)稱為可迭代對象:Iterable。
一類是集合數(shù)據(jù)類型,如list、tuple、dict、set、str等;
一類是generator,包括生成器和帶yield的generator function。
可以使用isinstance()判斷一個對象是否是Iterable對象。
生成器不但可以作用于for循環(huán),還可以被next()函數(shù)不斷調(diào)用并返回下一個值,直到最后拋出StopIteration錯誤表示無法繼續(xù)返回下一個值了。
可以被next()函數(shù)調(diào)用并不斷返回下一個值的對象稱為迭代器:Iterator。
生成器都是Iterator對象,但list、dict、str雖然是Iterable,卻不是Iterator。
把list、dict、str等Iterable變成Iterator可以使用iter()函數(shù)。
這一章節(jié),emmm,很多概念性的東西。但是還是很厲害的,Iterator的數(shù)據(jù)流是有序的,但是可能是無限的。對于list而言,不太可能存儲無限的數(shù)據(jù)。
函數(shù)式編程又開始新的大章節(jié)啦,因為落后了好幾天的進度,所以一定要抓緊學(xué)習(xí)啦~
高階函數(shù)Higher-order function變量可以指向函數(shù)
一般而言,abs()是函數(shù),abs(1)是函數(shù)調(diào)用。
我們常常使用 b = abs(1) 將函數(shù)結(jié)果賦給變量,但是如下
b = abs
則是將函數(shù)賦給變量,這個是可行的。
且變量指向了函數(shù)之后,可以使用變量來調(diào)用函數(shù)。
函數(shù)名也是變量
所以在設(shè)定變量賦值的時候,要注意不要覆蓋了函數(shù)名
傳入函數(shù)
函數(shù)可以接收另一個函數(shù)做為參數(shù),這種函數(shù)稱為高階函數(shù)
【十分的抽象了!】
map()和reduce()是倆Python的內(nèi)建函數(shù)。
map()
map()接收兩個參數(shù),一個是函數(shù),一個是Iterable,map()將傳入的函數(shù)一次作用到序列的每個元素,并將結(jié)果做為Iterator 返回。
**雖然循環(huán)也可以完成map()的操作,但是map()可以方便看清運算的需求。
map()僅僅用一行代碼,就完成了復(fù)雜的運算。
reduce()
reduce()把一個函數(shù)作用在一個序列上,這個函數(shù)必須接收兩個參數(shù),reduce把結(jié)果繼續(xù)和序列的下一個元素做累積計算
計算效果就是
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)fliter
Python內(nèi)建的filter()函數(shù)用于過濾序列。
filter()這個高階函數(shù),關(guān)鍵在于正確實現(xiàn)一個“篩選”函數(shù)。
下面是廖大神的關(guān)于素數(shù)的示范
其中輸出結(jié)果是無序數(shù)列,所以要有一定限制條件。
輸出的Iterator是惰性計算的數(shù)列,所以可以簡潔的輸出全體素數(shù),自然數(shù)等。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42886.html
摘要:給定的字符串只含有小寫英文字母,并且長度不超過。其他這題了,要重做看了其他的人的題解,使用的是無限逼近中位值的辦法,理論基礎(chǔ)應(yīng)該是泰勒公式。萬萬沒想到居然用到了泰勒公式手工執(zhí)行了下算法,反而理解的更快,但是泰勒公式還得再復(fù)習(xí)下。 寫在前面的話 今天持續(xù)做題ing,python有意思~今天的題有點虐心...興許是我太笨了...會努力學(xué)習(xí)的!動態(tài)規(guī)劃我來啦~ 開始做題 第一題 459. 重...
摘要:好久不見最近都在忙年底的年會,還沉迷于學(xué)習(xí)統(tǒng)計學(xué),教程還停留在基礎(chǔ)語法。做題做題無論如何,數(shù)據(jù)結(jié)構(gòu)還是很重要的,所以準(zhǔn)備每天刷的題目啦。第一題移除元素給定一個數(shù)組和一個值,你需要原地移除所有數(shù)值等于的元素,返回移除后數(shù)組的新長度。 好久不見 最近都在忙年底的年會,還沉迷于學(xué)習(xí)統(tǒng)計學(xué),python教程還停留在基礎(chǔ)語法。但是仔細(xì)規(guī)劃了下,還是要好好的瞄準(zhǔn)目標(biāo)前行。所以準(zhǔn)備呢,實戰(zhàn)走起來。 ...
摘要:新年快樂年終于來了,突然覺得有點如釋重負(fù)。大概年實在是太沉重了吧。年應(yīng)該是要充滿拼勁的一年希望可以成功轉(zhuǎn)型自己喜歡的職業(yè)。開始認(rèn)真學(xué)習(xí)了雞血一波。建議類的屬性名和實例屬性名不要重復(fù),否則類的屬性名會覆蓋。 新年快樂 2019年終于來了,突然覺得有點如釋重負(fù)。大概2018年實在是太沉重了吧。2019年應(yīng)該是要充滿拼勁的一年!!!!希望可以成功轉(zhuǎn)型自己喜歡的職業(yè)。 開始認(rèn)真學(xué)習(xí)了 雞血一波...
摘要:屬性,可以函數(shù)的名字在代碼運行期間動態(tài)增加功能的方式,稱之為裝飾器。本質(zhì)上,就是一個返回函數(shù)的高階函數(shù)。比如,定義一個能打印日志的。接受函數(shù)作為參數(shù),要放置在函數(shù)定義處。一個完整的的代碼如下記錄的是傳入的的值,位置在嵌套內(nèi)或者帶參數(shù)的如下。 又是一段叨叨 如果總是擔(dān)心能不能做到的話,那就干脆不要做了。想做的事情還是一往無前的好,什么都不想,就努力沖沖沖吧! 裝飾器 因為函數(shù)是一個對象。...
摘要:例如做累加,函數(shù)生成整數(shù)序列,函數(shù)轉(zhuǎn)換成。因為不能重復(fù),所以中沒有重復(fù)的。創(chuàng)建,需要提供一個作為輸入合集。重復(fù)元素在中自動被過濾。添加元素,重復(fù)添加無效果刪除元素 寫在前面的一點羅里吧嗦小嘮叨昨晚的python看到了快12點吧,然后進度相對來說還算滿意,只能說一點點推進,慶幸自己的大學(xué)還是一個比較認(rèn)真的小碼農(nóng),現(xiàn)在撿起來還算比較得心應(yīng)手(pia飛自己,算法什么的還沒到好嗎?。┖煤脤W(xué)習(xí)唄...
閱讀 1891·2021-09-24 09:48
閱讀 3236·2021-08-26 14:14
閱讀 1692·2021-08-20 09:36
閱讀 1480·2019-08-30 15:55
閱讀 3642·2019-08-26 17:15
閱讀 1438·2019-08-26 12:09
閱讀 618·2019-08-26 11:59
閱讀 3335·2019-08-26 11:57