Python-lambda表達式和推導式
lambda表達式和推導式,可實現使用一行語句完成功能開發的效果,減少代碼量。
1.lambda表達式
匿名函數,即沒有名字的函數
1.1基本語法:
lambda argument_list: expression
其中,lambda是預留關鍵字,argument_list和expression由用戶自定義。
說明:argument_list中參數形式可以是單個參數,如:a,也可以是多個參數,如:a,b 或者a,*args或者**kwargs
expression是一個關於參數的表達式,表達式中出現的參數需要在argument_list中有定義,並且表達式只能是單行的。如:NONE,sum(a),a+b,if a>10 else 0
1.2用法:
1.2.1 將lambda函數賦值給一個變量,通過這個變量間接調用該lambda函數,如:add=lambda x, y: x+y,定義了加法函數lambda x, y: x+y,並將其賦值給變量add,這樣變量add便成為具有加法功能的函數。例如,執行add(1,2),輸出為3。
1.2.2 將lambda函數賦值給其他函數,從而將其他函數用該lambda函數替換,如:time.sleep=lambda x:None。這樣,在後續代碼中調用time庫的sleep函數將不會執行原有的功能。例如,執行time.sleep(3)時,程序不會休眠3秒鐘,而是什麽都不做,從而把標準庫time中的函數sleep的功能屏蔽。
1.2.3 將lambda函數作為其他函數的返回值,返回給調用者,如:return lambda x, y: x+y返回一個加法函數。lambda函數實際上是定義在某個函數內部的函數,稱之為嵌套函數,或者內部函數。對應的,將包含嵌套函數的函數稱之為外部函數。內部函數能夠訪問外部函數的局部變量。
1.2.4 將lambda函數作為參數傳遞給其他函數,如:
- filter函數。此時lambda函數用於指定過濾列表元素的條件。例如filter(lambda x: x % 3 == 0, [1, 2, 3])指定將列表[1,2,3]中能夠被3整除的元素過濾出來,其結果是[3]。
-
sorted函數。此時lambda函數用於指定對列表中所有元素進行排序的準則。例如sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x))將列表[1, 2, 3, 4, 5, 6, 7, 8, 9]按照元素與5距離從小到大進行排序,其結果是[5, 4, 6, 3, 7, 2, 8, 1, 9]。
-
map函數。此時lambda函數用於指定對列表中每一個元素的共同操作。例如map(lambda x: x+1, [1, 2,3])將列表[1, 2, 3]中的元素分別加1,其結果[2, 3, 4]。
-
reduce函數。此時lambda函數用於指定列表中兩兩相鄰元素的結合條件。例如reduce(lambda a, b: ‘{}, {}‘.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9])將列表 [1, 2, 3, 4, 5, 6, 7, 8, 9]中的元素從左往右兩兩以逗號分隔的字符的形式依次結合起來,其結果是‘1, 2, 3, 4, 5, 6, 7, 8, 9‘。
以上轉自:https://blog.csdn.net/zjuxsl/article/details/79437563
2 推導式
通過舉例形式來說明各推導式。
2.1 列表推導式
list=[1,2,3,4]
list_c=[i+1 for i in list if i>1]
print (list_c)
輸出[3,4,5]
2.2 集合推導式
與2.1區別,用的是 {},而非[]
list_u={1,2,3,4}
list_uc={i+1 for i in list_u if i>2}
print (list_uc)
輸出:{2,3,4,5},註意:順序是隨機不同,註意集合的特性-無序!
2.3字典推導式
d_json={
key1:20,
key2:30,
key3:40
}
keys={key for key in d_json}
print (keys)
輸出:{“key1","key2","key3"}
key_v={key:value for key,value in d_json.items()) 註意:這裏因為要取value值,需要使用items()
print(key_v)
輸出:{‘key1‘:20,‘key2‘:30,‘key3‘:40}
Python-lambda表達式和推導式