欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python3中l(wèi)ambda表達(dá)式與函數(shù)式編程講解

 更新時間:2019年01月14日 17:19:28   作者:youzhouliu  
今天小編就為大家分享一篇關(guān)于Python3中l(wèi)ambda表達(dá)式與函數(shù)式編程講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧

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

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

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)

結(jié)果:


10

2、lambda表達(dá)式常用來編寫跳轉(zhuǎn)表(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']() 

結(jié)果:

4 8 16 
5 6 8

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

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

1、函數(shù)式編程

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

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、閉包

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

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

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

換成常規(guī)函數(shù)也可以實(shí)現(xiàn)閉包,只不過是這種方式稍顯啰嗦,如下:

>>> def my_add(n):
...   def wrapper(x):
...     return x+n
...   return wrapper
...
>>> add_5 = my_add(5)
>>> add_5(2)
7

不過不是任何情況lambda函數(shù)都要比常規(guī)函數(shù)更清晰明了,看這個例子:

f = lambda x: [[y for j, y in enumerate(set(x)) if (i >> j) & 1] for i in range(2**len(set(x)))]

這是返回某個集合的所有子集的lambda函數(shù),相信你要看一會兒才能看明白。

python中有這樣一句話是Explicit is better than implicit(明了勝于晦澀)。若用lambda函數(shù)不能使代碼變得更清晰,就要考慮使用常規(guī)的方式來定義函數(shù)。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • Python經(jīng)典案例之圖像漫水填充分割詳解

    Python經(jīng)典案例之圖像漫水填充分割詳解

    圖像分割是將圖像分成若干具有獨(dú)特性質(zhì)的區(qū)域并提取感興趣目標(biāo)的技術(shù)和過程,這篇文章將詳細(xì)講解漫水填充分割應(yīng)用,感興趣的小伙伴可以了解一下
    2023-01-01
  • python函數(shù)的萬能參數(shù)傳參詳解

    python函數(shù)的萬能參數(shù)傳參詳解

    這篇文章主要介紹了python函數(shù)的萬能參數(shù)傳參詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • linux系統(tǒng)使用python監(jiān)控apache服務(wù)器進(jìn)程腳本分享

    linux系統(tǒng)使用python監(jiān)控apache服務(wù)器進(jìn)程腳本分享

    這篇文章主要介紹了linux系統(tǒng)使用python監(jiān)控apache服務(wù)器進(jìn)程的腳本,大家參考使用吧
    2014-01-01
  • 一文總結(jié)學(xué)習(xí)Python的14張思維導(dǎo)圖

    一文總結(jié)學(xué)習(xí)Python的14張思維導(dǎo)圖

    一文總結(jié)學(xué)習(xí)Python的14張思維導(dǎo)圖,本文涵蓋了Python編程的核心知識,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 基于Python-Pycharm實(shí)現(xiàn)的猴子摘桃小游戲(源代碼)

    基于Python-Pycharm實(shí)現(xiàn)的猴子摘桃小游戲(源代碼)

    這篇文章主要介紹了基于Python-Pycharm實(shí)現(xiàn)的猴子摘桃小游戲,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • python中dir()與__dict__屬性的區(qū)別淺析

    python中dir()與__dict__屬性的區(qū)別淺析

    這篇文章主要給大家介紹了關(guān)于python中dir()與__dict__屬性的區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • 簡介Python設(shè)計(jì)模式中的代理模式與模板方法模式編程

    簡介Python設(shè)計(jì)模式中的代理模式與模板方法模式編程

    這篇文章主要介紹了Python設(shè)計(jì)模式中的代理模式與模板方法模式編程,文中舉了兩個簡單的代碼片段來說明,需要的朋友可以參考下
    2016-02-02
  • 在keras里實(shí)現(xiàn)自定義上采樣層

    在keras里實(shí)現(xiàn)自定義上采樣層

    這篇文章主要介紹了在keras里實(shí)現(xiàn)自定義上采樣層,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python繪制地圖神器folium的新人入門指南

    Python繪制地圖神器folium的新人入門指南

    folium庫是一個用于完成地圖可視化的Python擴(kuò)展庫,下面這篇文章主要給大家介紹了關(guān)于Python繪制地圖神器folium入門的相關(guān)資料,需要的朋友可以參考下
    2021-05-05
  • 深入理解Python中的Contextlib庫

    深入理解Python中的Contextlib庫

    Python提供了一些內(nèi)建的庫以支持各種常見的編程任務(wù),Contextlib庫是其中之一,它提供了一些用于支持上下文管理協(xié)議(即with語句)的函數(shù),這篇文章將詳細(xì)介紹如何使用Contextlib庫中的功能,需要的朋友可以參考下
    2023-06-06

最新評論