日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python 匿名函數相關總結

瀏覽:223日期:2022-06-24 11:05:49

寫python的時候,大多數場景下,我都是if else選手,因為最核心的邏輯幾乎都是通過if else語句來實現的。關于匿名函數這塊兒,其實可以用常見的循環等方法來實現,但是如果你想成為一個python的高手,匿名函數還是必須要了解的。因為匿名函數,能夠讓你的代碼足夠簡潔,

01 什么是匿名函數?

在python中,匿名函數,顧名思義,就是沒有名字的函數,它主要用在那些只使用一次的場景中。如果我們的程序中只需要調用一次某個簡單邏輯,把它寫成函數還需要先定義、取函數名字等一些列操作,這種場景下使用匿名函數往往能夠讓你的程序更加簡單。

匿名函數還有名稱,叫做lambda。匿名函數格式如下:

lambda arg1,arg2 ...,argN : expression

它常用格式是lambda關鍵字+逗號分隔的參數+冒號+表達式。

簡單看個例子吧:

----計算一個數的平方--->>> lambda x: x**2<function <lambda> at 0x7f6ebe013a28> ---注意,這個是一個函數的地址--->>> func=lambda x: x**2>>> func(2)4>>> >>> func(3)9

利用lambda,我們實現對一個數字x求平方的運算,在python中,**代表乘方操作。

上面的例子中,x就是參數,冒號后面的x**2就是expression表達式。

當然,我們也可以定義一個函數來實現乘方操作。

lambda區別于函數的一點在于,lambda是一個表達式,它不是一個函數,也不是一個語句。因此,lambda可以被用在一些特殊的地方,例如下面的場景:

我們可以用range函數來生成一個list,如下:

>>> a=[ range(10)] >>> a[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]

如果我們要對這些數字做乘方操作,則可以直接寫成下面的樣子:

>>> b=[(lambda x: x*x)(x) for x in range(10)]>>> b[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]----如果用函數來實現,會發現報錯--->>> def fun(x):... return x**2... >>> >>> c=[fun(range(10))]Traceback (most recent call last): File '<stdin>', line 1, in <module> File '<stdin>', line 2, in funTypeError: unsupported operand type(s) for ** or pow(): ’list’ and ’int’

當然,你也可以利用函數,使用另外的方法來實現這個過程如下:

>>> def fun2(x):... return x**2... >>> c=[]>>> for i in range(10):... c.append(fun2(i))>>> c[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

相比于前面的lambda函數,這個方法顯得不那么靈巧。

02 函數式編程

所謂的函數式編程,代表代碼中每塊都是不可變的,都是由函數構成的,函數本身相互獨立,互不影響,相同的輸入都對應相同的輸出,函數式編程特性,和lambda有密切的關系。

來看下面的例子,假如我們想讓一個list中的元素都乘以2,可以寫成下面的形式:

>>> l=[1,2,3,4,5]>>> def double_num(l):... for index in range(0, len(l)):... l[index] *= 2... return l... >>> double_num(l)[2, 4, 6, 8, 10]>>> l[2, 4, 6, 8, 10]

上面這段代碼,就不是一個函數式編程的例子。

因為每次輸入列表L,L的值都會被改變,如果我們多次調用double_num這個函數,每次的結果都不一樣。

那么如果我們讓它變成一個函數式編程,就得寫成下面這樣:

>>> l=[1,2,3,4,5] >>> def double_num1(l): ... new_list=[]... for index in l: ... new_list.append(index*2)... return new_list... >>> double_num1(l)[2, 4, 6, 8, 10]>>> l[1, 2, 3, 4, 5]

在python中,提供了常用的幾個函數map、filter、reduce同lambda一起使用,來實現函數式編程(注意,這3個函數需要在python3的環境下使用)。

map函數 map(function, list)

注意,這里的function可以是匿名函數,也可以是普通的函數。

還是上面的乘以2的例子,假如我們使用map函數配合lambda來實現,可以寫成下面這樣:

>>> l = [1, 2, 3, 4, 5] >>> new_list = map(lambda x: x * 2, l) >>> for i in new_list:... print(i)... 246810

這里的lambda就可以用函數來替換,如下:

>>> l = [1, 2, 3, 4, 5] >>> def double_x(x):... return x*2>>> res=map(double_x, l)>>> for i in res:... print(i)... 246810

filter函數 filter(function,list)

filter函數主要用來對可迭代的對象中的每個元素,都用function判斷,將返回true的對象返回,返回false的對象拋棄,如下為判斷一個集合中的偶數:

>>> l = [1, 2, 3, 4, 5] >>> new_l=filter(lambda x: x%2==0, l)>>> for i in new_l:... print(i)... 24

reduce函數 reduce(function, list)

reduce主要用來對一個列表做一些累計操作,假如我們要計算某個列表的累計乘積,可以用下面的方法:

>>> from functools import reduce>>> l = [1, 2, 3, 4, 5] >>> product = reduce(lambda x,y: x*y, l) >>> product12003 lambda的性能如何?

下面是一個例子,測試不同的方案下,使用lambda、for循環和新建list的方法,分別對一個集合元素乘以2,計算的耗時情況:

[root@VM-0-14-centos ~]# python3 -mtimeit -s’a=range(1000)’ ’map(lambda x: x*2, a)’ 1000000 loops, best of 3: 0.538 usec per loop[root@VM-0-14-centos ~]# python3 -mtimeit -s’a=range(1000)’ ’[x * 2 for x in a]’ 10000 loops, best of 3: 122 usec per loop[root@VM-0-14-centos ~]# python3 -mtimeit -s’a=range(1000)’ ’l = []’ ’for i in a: l.append(i * 2)’ 1000 loops, best of 3: 252 usec per loop

可以看到,使用map+lambda計算的時候,性能是更好的。map函數是由c語言寫的,運行的時候不需要通過python解釋器,并且內部做了很多優化,因此性能會更好。

以上就是python 匿名函數相關總結的詳細內容,更多關于python 匿名函數的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩精品一卡| 欧美日韩亚洲在线观看| 日韩在线a电影| 综合色就爱涩涩涩综合婷婷| 日本一区免费网站| 国产精品v一区二区三区| 国产91在线精品| 久久精品播放| 天堂va蜜桃一区二区三区| 日韩在线成人| 国产高清亚洲| 国产成人黄色| 亚洲免费成人| 日本午夜精品久久久久| 美女视频网站久久| 欧美成a人免费观看久久| 亚洲免费精品| 欧美偷窥清纯综合图区| 在线看片国产福利你懂的| 欧美一区二区三区高清视频| 综合在线一区| 精品国产欧美日韩一区二区三区| 亚洲欧美一区在线| 欧美综合精品| 色爱av综合网| 日韩精品亚洲专区在线观看| 久久麻豆视频| 一区二区视频欧美| 国产精品美女午夜爽爽| av一区二区高清| 久久av综合| 午夜久久福利| 国产精品久久久久久久久久妞妞 | 亚洲精品免费观看| 欧美国产日本| 亚洲精品1区2区| 国产日产精品_国产精品毛片| 群体交乱之放荡娇妻一区二区| 天堂va欧美ⅴa亚洲va一国产| 国内不卡的一区二区三区中文字幕| 午夜在线观看免费一区| 国产成人精品三级高清久久91| 老鸭窝毛片一区二区三区| 成人精品视频| 91成人在线网站| 欧美1区免费| 麻豆成人综合网| 综合激情五月婷婷| 日本欧美不卡| 国产日韩高清一区二区三区在线 | 久久精品国产久精国产爱| 尤物在线精品| 色一区二区三区四区| 欧美日本久久| 亚洲天堂日韩在线| 国产国产精品| 日韩精品91| 久久只有精品| 亚洲精品乱码久久久久久蜜桃麻豆| 999精品一区| 97精品国产| 国产精品99久久免费观看| 一区二区精品| 尤物精品在线| 蜜臀av免费一区二区三区| 不卡专区在线| 麻豆91在线播放| 国产丝袜一区| 日本va欧美va欧美va精品| 天堂va蜜桃一区二区三区| 999精品在线| 日韩精品永久网址| 日韩av自拍| 国产精品羞羞答答在线观看| 亚洲三级精品| 中文字幕一区二区三区在线视频| 1024精品久久久久久久久| av在线日韩| 视频小说一区二区| 欧美不卡高清一区二区三区| 高清不卡一区| 国产成人精品福利| 国产成人免费精品| 国产一区二区三区四区大秀| 久久精品国产一区二区| 国产精品jk白丝蜜臀av小说| 欧美另类中文字幕 | 久久精品影视| 日本久久成人网| 亚洲高清激情| 国产精品7m凸凹视频分类| 尤物精品在线| 日韩专区欧美专区| 亚洲va久久| 青青草国产成人99久久| 欧美伊人影院| 久久av日韩| 日韩综合在线| 久久人人精品| 日韩视频在线一区二区三区| 欧美99久久| 久久高清一区| 日韩精品三级| 国产精品a级| 亚洲综合电影| 日韩视频中文| 日本不卡一区二区| 国产日产精品_国产精品毛片| 国产精品一级在线观看| 国产成人精品一区二区免费看京| 欧美成人a交片免费看| 丝袜av一区| 免费久久99精品国产自在现线| 综合一区av| 久久伊人亚洲| 日韩欧美中文| 国产一级久久| 欧美日韩va| 国产伦久视频在线观看| 欧美在线资源| 国产美女精品视频免费播放软件| av资源中文在线| 99亚洲视频| 国产探花一区二区| 夜鲁夜鲁夜鲁视频在线播放| 亚洲综合另类| 国产精品115| 国产91精品对白在线播放| 亚洲天堂日韩在线| 久久精品国产一区二区| 欧美日韩免费观看视频| 老鸭窝亚洲一区二区三区| 久久不卡日韩美女| 亚洲精品91| 久久爱www.| 欧美日韩三区| 麻豆免费精品视频| 婷婷色综合网| 国产精品一区二区99| 精品在线99| 国产福利亚洲| 亚洲欧美日韩在线观看a三区| 国产黄色精品| 模特精品在线| 91视频久久| 首页国产欧美久久| 精品成av人一区二区三区| 蜜桃视频在线观看一区| 成人国产精品| 婷婷综合国产| 久久久国产精品一区二区中文| 日韩欧美四区| 婷婷综合六月| 国产欧美久久一区二区三区| 午夜欧美视频| 水蜜桃精品av一区二区| 日本不卡高清| 1000部精品久久久久久久久| 国产欧美一区二区三区米奇| 日韩一级网站| 97精品国产一区二区三区| 中文字幕一区二区三区日韩精品 | 国产福利片在线观看| 日韩国产欧美一区二区三区| 国产中文一区| www.51av欧美视频| 国产日韩一区二区三免费高清| 国产模特精品视频久久久久| 国产精品yjizz视频网| 日韩精品91亚洲二区在线观看| 在线日韩欧美| 国产精品毛片久久| 欧美成a人片免费观看久久五月天| 亚洲一区亚洲| 久久精品青草| 色婷婷色综合| 国产精品资源| 日本在线观看不卡视频| 麻豆精品91| 国产精品av一区二区| av日韩中文| 精品美女在线视频| 国产精品nxnn| 国产乱码精品一区二区三区亚洲人| 亚洲欧美日韩综合国产aⅴ| 国产91精品对白在线播放| 中文字幕在线高清| 欧美极品一区二区三区| 欧美视频精品全部免费观看| 视频精品一区二区| 国产一级久久| 樱桃成人精品视频在线播放| 99国产精品免费视频观看| 高清日韩中文字幕| 美女久久久久久 | 日韩国产在线观看| 亚欧成人精品| 婷婷综合福利| 日韩不卡在线观看日韩不卡视频| 亚洲一级大片|