1. 程式人生 > >『 Python筆記』 lambda表示式和函數語言程式設計

『 Python筆記』 lambda表示式和函數語言程式設計

lambda表示式

lambda用來編寫簡單的函式,而def用來處理更強大的任務。

lambda的一般形式是關鍵字lambda後面跟一個或多個引數,緊跟一個冒號,以後是一個表示式。

lambda是一個表示式而不是一個語句。它能夠出現在Python語法不允許def出現的地方。作為表示式,lambda返回一個值(即一個新的函式)。

程式碼中內嵌lambda表示式

f = lambda x,y,z : x+y+z  
print f(1,2,3)  # 6

lambda表示式巢狀在一個函式內使用

從可讀性的角度來說,應儘量避免使用巢狀的lambda表示式。

 def make_repeat
(n):
return lambda s : s * n a = make_repeat(2) print a(8)

內建函式

map()

遍歷序列,對序列中每個元素進行操作,最終獲取新的序列。

li = [11, 22, 33]
new_list = map(lambda a: a + 100, li)
print new_list  # [111, 122, 133]

sl = [1, 2, 3]
new_list = map(lambda a, b: a + b, li, sl)
print new_list  # [12, 24, 36]

列表解析

列表解析可以實現map函式同樣的功能,而且往往比map要快,列表解析比map更強大。

li = [11, 22, 33]
new_list = [x+100 for x in li]
print new_list  # [111, 122, 133]

filter()

對於序列中的元素進行篩選,最終獲取符合條件的序列。

li = [11, 22, 33]
new_list = filter(lambda arg: arg > 22, li)
# filter第一個引數為空,將獲取原來序列
print new_list  # [33]

reduce()

對於序列內所有元素進行累計操作

li = [11, 22, 33]
result = reduce(lambda
arg1, arg2: arg1 + arg2, li) # reduce的第一個引數,函式必須要有兩個引數 # reduce的第二個引數,要迴圈的序列 # reduce的第三個引數,初始值 print result # 66

函式設計的概念

  • 耦合性:只有在真正必要的情況下才使用全域性變數

  • 耦合性:不要改變可變型別的引數,除非呼叫者希望這樣做

  • 耦合性:避免直接改變另一個檔案模組中的變數

  • 聚合性:每一個函式都應有一個單一的、統一的目標

參考

Mark Lutz《Python學習手冊》