1. 程式人生 > 其它 >python中的六個函式

python中的六個函式

Lambda 函式

Lambda函式用於建立匿名函式,即沒有名稱的函式。它只是一個表示式,函式體比def簡單很多。當我們需要建立一個函式來執行單個操作並且可以在一行中編寫時,就可以用到匿名函數了。

lambda [arg1 [,arg2,.....argn]]:expression

lambda的主體是一個表示式,而不是一個程式碼塊。僅僅能在lambda表示式中封裝有限的邏輯進去。例如:

lambda x: x+2

如果我們也想像def定義的函式隨時呼叫,可以將lambda函式分配給這樣的函式物件。

add2 = lambda x: x+2
add2(10)

輸出結果:

利用Lambda函式,可以將程式碼簡化很多,具體再舉個例子。

如上圖所示,結果列表newlist是使用lambda函式用一行程式碼生成的。

Map 函式

map()函式會將一個函式對映到一個輸入列表的所有元素上。

map(function,iterable)

比如我們先建立了一個函式來返回一個大寫的輸入單詞,然後將此函式應有到列表colors中的所有元素。

def makeupper(word):
    return word.upper()

colors=['red','yellow','green','black']
colors_uppercase=list(map(makeupper,colors))
colors_uppercase

輸出結果:

此外,我們還可以使用匿名函式lambda

來配合map函式,這樣可以更加精簡。

colors=['red','yellow','green','black']
colors_uppercase=list(map(lambda x: x.upper(),colors))
colors_uppercase

如果我們不用Map函式的話,就需要使用for迴圈。

如上圖所示,在實際使用中Map函式會比for迴圈依次列表元素的方法快1.5倍

Reduce函式

當需要對一個列表進行一些計算並返回結果時,reduce()是個非常有用的函式。舉個例子,當需要計算一個整數列表所有元素的乘積時,即可使用reduce函式實現。[1]

它與函式的最大的區別就是,reduce()

裡的對映函式(function)接收兩個引數,而map接收一個引數。

reduce(function, iterable[, initializer]) 

接下來我們用例項來演示reduce()的程式碼執行過程。

from functools import reduce
def add(x, y) :   # 兩數相加
    return x + y
numbers = [1,2,3,4,5]
sum1 = reduce(add, numbers)   # 計算列表和

得到結果sum1 = 15,其程式碼執行過程如下方動圖所示。

▲程式碼執行過程動圖

結合上圖我們會看到,reduce將一個相加函式add()作用在一個列表[1,2,3,4,5]上,對映函式接收了兩個引數,reduce()把結果繼續和列表的下一個元素做累加計算

此外,我們同樣可以使用匿名函式lambda來配合reduce函式,這樣可以更加精簡。

from functools import reduce
numbers = [1,2,3,4,5]
sum2 = reduce(lambda x, y: x+y, numbers)

得到輸出sum2= 15,與之前結果保持一致。

需要注意:Python3.x開始reduce()已經被移到functools模組裡[2],如果我們要使用,需要用from functools import reduce匯入.

enumerate 函式

enumerate()函式用於將一個可遍歷的資料物件(如列表、元組或字串)組合為一個索引序列,同時列出資料和資料下標,一般用在for迴圈當中。它的語法如下所示:

enumerate(iterable, start=0)

它的兩個引數,一個是序列、迭代器或其他支援迭代物件;另一個是下標起始位置,預設情況從0開始,也可以自定義計數器的起始編號。

colors = ['red', 'yellow', 'green', 'black']
result = enumerate(colors)

如果我們有一個存放colors的顏色列表,執行後就會得到一個enumerate(列舉) 物件。它可以直接在for迴圈中使用,也可以轉換為列表,具體用法如下所示。

for count, element in result:
    print(f"迭代編號:{count},對應元素:{element}")

Zip 函式

zip()函式用於將可迭代的物件作為引數,將物件中對應的元素打包成一個個元組,然後返回由這些元組組成的列表[3]

我們還是用兩個列表作為例子演示:

colors = ['red', 'yellow', 'green', 'black']
fruits = ['apple', 'pineapple', 'grapes', 'cherry']
for item in zip(colors,fruits):
    print(item)

輸出結果:

當我們使用zip()函式時,如果各個迭代器的元素個數不一致,則返回列表長度與最短的物件相同。

prices =[100,50,120]
for item in zip(colors,fruits,prices):
    print(item)

Filter 函式

filter()函式用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表,其語法如下所示[4]

filter(function, iterable)

比如舉個例子,我們可以先建立一個函式來檢查單詞是否為大寫,然後使用filter()函式過濾出列表中的所有奇數:

def is_odd(n):
    return n % 2 == 1

old_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

new_list = filter(is_odd, old_list)
print(newlist)

輸出結果: