python中Lambda表達(dá)式詳解
如果你在學(xué)校讀的是計(jì)算機(jī)科學(xué)專(zhuān)業(yè),那么可能學(xué)過(guò) Lambda 表達(dá)式, 不過(guò)可能從來(lái)沒(méi)有用過(guò)它。如果你不是計(jì)算機(jī)科學(xué)專(zhuān)業(yè),它們看著可能 有點(diǎn)兒陌生(或者只是“曾經(jīng)學(xué)習(xí)過(guò)的東西”)。在這一節(jié)里,雖然我們 不打算深入學(xué)習(xí)這類(lèi)函數(shù),但是會(huì)用幾個(gè)例子來(lái)演示它們是如何用在網(wǎng) 頁(yè)抓取中的。
Lambda 表達(dá)式本質(zhì)上就是一個(gè)函數(shù),可以作為變量傳入另一個(gè)函數(shù); 也就是說(shuō),一個(gè)函數(shù)不是定義成 f(x, y),而是可以定義成 f(g(x), y) 或 f(g(x), h(y)) 的形式。 BeautifulSoup 允許我們把特定類(lèi)型的函數(shù)作為參數(shù)傳入 find_all 函 數(shù)。唯一的限制條件是這些函數(shù)必須把一個(gè)標(biāo)簽對(duì)象作為參數(shù)并且返回 布爾類(lèi)型的結(jié)果。BeautifulSoup 用這個(gè)函數(shù)來(lái)評(píng)估它遇到的每個(gè)標(biāo)簽對(duì) 象,最后把評(píng)估結(jié)果為“真”的標(biāo)簽保留,把其他標(biāo)簽剔除。
例如,下面的代碼就是獲取有兩個(gè)屬性的所有標(biāo)簽:
bs.find_all(lambda tag: len(tag.attrs) == 2)
這里,作為參數(shù)傳入的函數(shù)是 len(tag.attrs) == 2。當(dāng)該參數(shù)為真 時(shí),find_all 函數(shù)將返回 tag。即找出帶有兩個(gè)屬性的所有標(biāo)簽,如 下所示:
<div class="body" id="content"></div> <span style="color:red" class="title"></span>
Lambda 函數(shù)非常實(shí)用,你甚至可以用它來(lái)替代現(xiàn)有的 BeautifulSoup 函 數(shù):
bs.find_all(lambda tag: tag.get_text() == 'Or maybe he\'s only resting?')
如果不使用 Lambda 函數(shù),代碼如下:
bs.find_all('', text='Or maybe he\'s only resting?')
如果你能記住 Lambda 函數(shù)的語(yǔ)法,以及如何獲取標(biāo)簽的屬性,那么你 可能再也不需要記住 BeautifulSoup 的語(yǔ)法了!
由于 Lambda 函數(shù)可以是任意返回 True 或者 False 值的函數(shù),你甚至 可以結(jié)合使用 Lambda 函數(shù)與正則表達(dá)式,來(lái)查找匹配特定字符串模式 的屬性的標(biāo)簽。
以上就是關(guān)于python Lambda表達(dá)式的相關(guān)知識(shí)點(diǎn)內(nèi)容,感謝大家的閱讀和對(duì)腳本之家的支持。
相關(guān)文章
Python中利用all()來(lái)優(yōu)化減少判斷的實(shí)例分析
在本篇文章里小編給大家整理的是一篇關(guān)于Python中利用all()來(lái)優(yōu)化減少判斷的實(shí)例分析內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。2021-06-06python采用django框架實(shí)現(xiàn)支付寶即時(shí)到帳接口
這篇文章主要介紹了python采用django框架實(shí)現(xiàn)支付寶即時(shí)到帳接口的相關(guān)資料,需要的朋友可以參考下2016-05-05matplotlib繪制鼠標(biāo)的十字光標(biāo)的實(shí)現(xiàn)(自定義方式,官方實(shí)例)
這篇文章主要介紹了matplotlib繪制鼠標(biāo)的十字光標(biāo)(自定義方式,官方實(shí)例),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01