1. 程式人生 > >Python(3) python小知識--reduce(), range(), lambda

Python(3) python小知識--reduce(), range(), lambda

          reduce()函式也是Python內建的一個高階函式。

reduce()函式接收的引數和 map()類似,一個函式 f,一個list,但行為和 map()不同,reduce()傳入的函式 f 必須接收兩個引數,reduce()list的每個元素反覆呼叫函式f,並返回最終結果值。

例如,編寫一個f函式,接收xy,返回xy的和:

1

2

def f(x, y):

    return x + y

呼叫 reduce(f, [1, 3, 5, 7, 9])

時,reduce函式將做如下計算:

1

2

3

4

5

先計算頭兩個元素:f(1, 3),結果為4;

再把結果和第3個元素計算:f(4, 5),結果為9;

再把結果和第4個元素計算:f(9, 7),結果為16;

再把結果和第5個元素計算:f(16, 9),結果為25;

由於沒有更多的元素了,計算結束,返回結果25。

上述計算實際上是對 list 的所有元素求和。雖然Python內建了求和函式sum(),但是,利用reduce()求和也很簡單。

reduce()還可以接收第3個可選引數,作為計算的初始值。

如果把初始值設為100,計算:

1

reduce(f, [1, 3, 5, 7, 9], 100)

結果將變為125,因為第一輪計算是:

計算初始值和第一個元素:f(100, 1),結果為101


先列幾個range()函式的幾個用法:

              

函式原型:rangestart end scan):

引數含義:start:計數從start開始。預設是從

0開始。例如range5)等價於range05;

             end:技術到end結束,但不包括end.例如:range05[0, 1,2, 3, 4]沒有5

             scan:每次跳躍的間距,預設為1。例如:range05等價於range(0, 5, 1)


lambda只是一個表示式,函式體比def簡單很多。

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

lambda表示式是起到一個函式速寫的作用。允許在程式碼內嵌入一個函式的定義。

如下例子:


定義了一個lambda表示式,求三個數的和。

再看一個例子:

用lambda表示式求n的階乘。