Python(3) python小知識--reduce(), range(), lambda
reduce()函式接收的引數和 map()類似,一個函式 f,一個list,但行為和 map()不同,reduce()傳入的函式 f 必須接收兩個引數,reduce()對list的每個元素反覆呼叫函式f,並返回最終結果值。
例如,編寫一個f函式,接收x和y,返回x和y的和:
1 2 |
def f(x, y): return x + y |
呼叫 reduce(f, [1, 3, 5, 7, 9])
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個可選引數,作為計算的初始值。
1 |
reduce(f, [1, 3, 5, 7, 9], 100) |
結果將變為125,因為第一輪計算是:
計算初始值和第一個元素:f(100, 1),結果為101。
先列幾個range()函式的幾個用法:
函式原型:range(start, end, scan):
引數含義:start:計數從start開始。預設是從
end:技術到end結束,但不包括end.例如:range(0,5)是[0, 1,2, 3, 4]沒有5
scan:每次跳躍的間距,預設為1。例如:range(0,5)等價於range(0, 5, 1)
lambda只是一個表示式,函式體比def簡單很多。
lambda的主體是一個表示式,而不是一個程式碼塊。僅僅能在lambda表示式中封裝有限的邏輯進去。
lambda表示式是起到一個函式速寫的作用。允許在程式碼內嵌入一個函式的定義。
如下例子:
定義了一個lambda表示式,求三個數的和。
再看一個例子:
用lambda表示式求n的階乘。