国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python3中lambda表達式與函數式編程講解

2020-02-16 00:38:48
字體:
來源:轉載
供稿:網友

簡單來說,編程中提到的 lambda 表達式,通常是在需要一個函數,但是又不想費神去命名一個函數的場合下使用,也就是指匿名函數。其一般有如下幾種使用方式:

1、lambda的一般形式是關鍵字lambda后面跟一個或多個參數,緊跟一個冒號,以后是一個表達式。lambda是一個表達式而不是一個語句。它能夠出現在Python語法不允許def出現的地方。作為表達式,lambda返回一個值(即一個新的函數)。lambda用來編寫簡單的函數,而def用來處理更強大的任務。例如:

f = lambda x,y,z : x+y+z print f(1,2,3) g = lambda x,y=2,z=3 : x+y+z print g(1,z=4,y=5)

結果:


10

2、lambda表達式常用來編寫跳轉表(jump table),就是行為的列表或字典。例如:

L = [(lambda x: x**2),   (lambda x: x**3),   (lambda x: x**4)] print L[0](2),L[1](2),L[2](2) D = {'f1':(lambda: 2+3),   'f2':(lambda: 2*3),   'f3':(lambda: 2**3)} print D['f1'](),D['f2'](),D['f3']() 

結果:

4 8 16 
5 6 8

3、lambda表達式可以嵌套使用,但是從可讀性的角度來說,應盡量避免使用嵌套的lambda表達式。

Lambda函數又稱匿名函數,匿名函數就是沒有名字的函數,函數沒有名字也行?當然可以啦。有些函數如果只是臨時一用,而且它的業務邏輯也很簡單時,就沒必要非給它取個名字不可。lamdba函數的正確使用場景:

1、函數式編程

盡管Python算不上是一門純函數式編程語言,但它本身提供了很多函數式編程的特性,Python中,也有幾個定義好的全局函數方便使用的,像map、reduce、filter、sorted這些函數都支持函數作為參數,lambda函數就可以應用在函數式編程中。如下:

from functools import reduce foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]print (list(filter(lambda x: x % 3 == 0, foo)))#[18, 9, 24, 12, 27]print (list(map(lambda x: x * 2 + 10, foo)))#[14, 46, 28, 54, 44, 58, 26, 34, 64]print (reduce(lambda x, y: x + y, foo))#139

2、閉包

閉包本身是一個晦澀難懂的概念,在這里我們以簡單粗暴地理解為閉包就是一個定義在函數內部的函數,閉包使得變量即使脫離了該函數的作用域范圍也依然能被訪問到。lambda函數作為閉包的例子:

>>> def my_add(n):...   return lambda x:x+n
>>> add_3 = my_add(3)>>> add_3(7)10

這里lambda函數就是一個閉包,在全局作用域范圍中,add_3(7)可以正常執行且返回值為10,之所以返回10是因為在my_add局部作用域中,變量n的值在閉包的作用使得它在全局作用域也可以被訪問到。

換成常規函數也可以實現閉包,只不過是這種方式稍顯啰嗦,如下:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 温宿县| 永清县| 泗洪县| 珠海市| 喀喇沁旗| 柘荣县| 岳池县| 始兴县| 昌黎县| 大化| 敦煌市| 万年县| 永州市| 平塘县| 松溪县| 宜川县| 定边县| 宁晋县| 织金县| 房产| 西乌| 呈贡县| 呼伦贝尔市| 二连浩特市| 青冈县| 金昌市| 德惠市| 海盐县| 会同县| 禄丰县| 富民县| 慈利县| 离岛区| 朝阳区| 凤城市| 彰化市| 汉寿县| 江口县| 山丹县| 咸丰县| 偃师市|