1. 程式人生 > >Python-lambda表達式和推導式

Python-lambda表達式和推導式

pytho ssi 變量 sorted red baidu argument 列表推導 參數傳遞

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表達式和推導式