用乙個簡單的例子來理解python高階函式

2021-09-06 13:42:16 字數 1756 閱讀 1486

用乙個簡單的例子來理解python高階函式

*************************===

最近在用mailx傳送郵件, 寫法大致如下.

echo 'body'|mailx -s 'title' '[email protected],[email protected]'

不知什麼原因, 在一台機器上只要mailto中包含空格, 郵件就傳送不出去. 所以需要對收件人做規範化處理, 即去除空格, 去除多餘的逗號.

這個處理過程使用到了map()和reduce(), 使用情形很簡單, 更有助於理解這兩個函式的作用.

#

原始的mailto

mailtostr='

,[email protected] ,, [email protected],[email protected],'#

該字串中, 有空郵箱位址, 還有郵箱前後帶空格

#step 1: 先轉換成list

mailto=mailtostr.split(','

)#結果為, ['', '[email protected] ', '', ' [email protected]', '[email protected]', '']

#step 2:對list中元素做trim

mailto=map(lambda

x: x.strip(),mailto)

#結果為, ['', '[email protected]', '', '[email protected]', '[email protected]', '']

#def

exceptempty(x,y):

if x==''

:

return

y

elif y==''

:

return

x

else

:

return x+'

,'+y

mailtostr=reduce(exceptempty,mailto)

#mailtostr的結果是 '[email protected],[email protected],[email protected]'

*************************===

總結一下 map/reduce/zip/filter幾個高階函式的作用

*************************===

map()函式, 我們需要提供2個引數, 第1個是lambda表示式或函式, 第2個引數是個list,

map()的作用是, 將list中的每個元素, 帶到lambda表示式中求值, 最後再組成乙個list.

比如,map(lambda x: x.strip(),['[email protected]', '[email protected]']), 對每個元素都做了trim

reduce()函式, 我們需要提供2個引數, 第1個是lambda表示式或函式, 第2個引數是個list,

reduce()作用是, 將list中的相連的兩個元素, 帶入到lambda表示式中做"遞迴"求值, 最後生成乙個scalar值.

zip()的作用是, 將兩個list中的元素進行編織mesh.

zip([1,2,3],['a','b'])

#結果為[(1, 'a'), (2, 'b')]

filter()的作用是很直觀, 對於給定的list, 按照我們設定的lambda表示式條件, 過濾掉不符合的元素.

filter(lambda x: x>0, [-1,0,1,2])

#結果為[1,2]

補充一點, lambda 表示式, 冒號後為乙個表示式, 不是 `return` 語句.

通過乙個小例子來簡單理解C語言中的記憶體空間管理

對於乙個c語言程式而言,記憶體空間主要由五個部分組成 段 text 資料段 data bss段 bss 堆和棧組成,其中 段,資料段和bss段是編譯的時候由編譯器分配的,而堆和 棧是程式執行的時候由系統分配的。布局如下 在上圖中,由編譯器分配的位址空間都是在連線的時候分配的,而執行時分配的空間是在程...

從乙個多執行緒的例子,來理解Sleep的機制和用法

這個例子是兩個執行緒用於售票,保證輪流售票的有序性。include include dword winapi fun1proc lpvoid lpparameter 執行緒1 dword winapi fun2proc lpvoid lpparameter 執行緒2 int tickets 6000...

用乙個小例子,來分析nodejs的非同步呼叫的順序

通過同步和非同步的對比,我們來看下nodejs是如何處理一些非同步呼叫的。下面是nodejs use strict const fs require fs 模擬非同步 console.time setout settimeout function 0 setimmediate function pr...