Python之必備函式

2022-06-25 19:24:09 字數 2724 閱讀 5848

匿名函式(anonymous function)是指一類無需定義識別符號(函式名)的函式。通俗來講,就是它可以讓我們的函式,可以不需要函式名。

正常情況下,我們定義乙個函式,使用的是def關鍵字,而當你學會使用匿名函式後,替代def的是lambda

下面就deflambda分別舉例說明:

def mysum(x, y):

return x+y

mysum01(2, 3)

# 5(lambda x, y: x+y)(2, 4)

# 6

從上面的示例,我們可以看到匿名函式直接執行,省下了很多行的**!

下面,我們來仔細看一下它的用法

帶 if/else

>>>( lambda x, y: x if x 

1

巢狀函式

>>>( lambda x: ( lambda y: ( lambda z: x + y + z  )( 1 ) )( 2 ) )( 3)

6

遞迴函式

>>> func = lambda n:1 if n == 0 else n * func(n-1)

>>> func(5)

120

或者

>>> f = lambda func, n: 1 if n == 0 else n * func( func, n - 1)

>>> f(f,4)

24

從以上示例來看,lambda表示式和常規的函式相比,寫法比較怪異,可讀性相對較差。除了可以直接執行之外,好像並沒有其他較為突出的功能,為什麼在今天我們要介紹它呢?

首先我們要知道lambda是乙個表示式,而不是乙個語句。正因為這個特點,我們可以在一些特殊的場景中去使用它。具體是什麼場景呢?接下來我們會介紹到幾個非常好用的內建函式。

map函式,它接收兩個引數,第乙個引數是乙個函式物件(當然也可以是乙個lambda表示式),第二個引數是乙個序列。

它可以實現怎樣的功能呢,我舉個例子你就明白了。

>>> map(lambda x: x*2, [1,2,3,4,5])

[2, 4, 6, 8, 10]

可以很清楚地看到,它可以將後面序列中的每乙個元素做為引數傳入lambda中。

當我們不使用 map 函式時,你也許會這樣子寫。

mylist=

for i in [1,2,3,4,5]:

filter函式,和map函式相似。同樣也是接收兩個引數,乙個lambda表示式,乙個序列。它會遍歷後面序列中每乙個元素,並將其做為引數傳入lambda表示式中,當表示式返回 true,則元素會被保留下來,當表示式返回 false ,則元素會被丟棄。

下面這個例子,將過濾出乙個列表中小於0的元素。

>>>filter(lambda x: x < 0, range(-5, 5))

[-5, -4, -3, -2, -1]

reduce函式,也是類似的。它的作用是先對序列中的第 1、2 個元素進行操作,得到的結果再與第三個資料用lambda函式運算,將其得到的結果再與第四個元素進行運算,以此類推下去直到後面沒有元素了。

reduce 邏輯演示

這邊舉個例子你也就明白了。

>>>reduce(lambda x,y: x+y, [1,2,3,4,5])

15

它的運算過程分解一下是這樣的。

1+2=3

3+3=6

6+4=10

10+5=15

以上幾個函式,熟練的掌握它們的寫法,可以讓我們的**看起來更加的 pythonic ,在某一程度上**看起來更加的簡潔。

如果你是新手呢,你需要注意的是,以上示例是在 python2.x 環境下演示的。而在 python3.x 中,卻有所不同,你可以自己嘗試一下。

這裡總結一下:

第一點,mapfilter函式返回的都不再是乙個列表,而是乙個迭代器物件。這裡以map為例

>>> map_obj = map(lambda x: x*2, [1,2,3,4,5])

>>> from collections.abc import

iterator

>>>isinstance(map_obj, iterator)

true

>>>next(map_obj)

2>>>list(map_obj)

[4, 6, 8, 10]

第二點,reduce不可以直接呼叫,而是要先導入才能使用。

from functools import reduce
注:**於----痴海

Python爬蟲之必備chardet庫

玩兒過爬蟲的朋友應該知道,在爬取不同的網頁時,返回結果會出現亂碼的情況。比如,在爬取某個中文網頁的時候,有的頁面使用gbk gb2312,有的使用utf8,如果你需要去爬一些頁面,知道網頁編碼很重要的。雖然html頁面有charset標籤,但是有些時候是不對的,那麼chardet就能幫我們大忙了。使...

python基礎 1 python基礎之必備知識

2 識別符號命名規範 3 資料型別 4 總結 小王沒上班幾天,老闆過來告訴小王把這份業務 熟悉下,納尼,全是26個英文本母,都沒有一點注釋,嘿嘿,注釋雖好,可不要貪杯喲!那麼在python中,分為單行注釋和多行注釋,單行注釋以 開頭,多行注釋使用兩個三引號包含起來,如下圖所示 小王平時喜歡幹啥呀 p...

python必備單詞

print 輸出 input 輸入 str 字串 utf 8 字串的一種成熟編碼 ord 獲取字串的整數表示形式 chr 把編碼轉換成對應字元 encode 編碼指定為 bytes len 檢視乙個合集裡包含多少個元素 float 浮點數 list 可更改的有序合集 tuple 不可修改的有序列表,...