『 Python筆記』 lambda表示式和函數語言程式設計
阿新 • • 發佈:2019-02-02
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學習手冊》