日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python基础(part17)--函数式编程

發(fā)布時(shí)間:2023/12/19 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python基础(part17)--函数式编程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

鄙人學(xué)習(xí)筆記
開發(fā)工具:Spyder


文章目錄

    • 函數(shù)式編程
        • 舉個(gè)例子1
        • 舉個(gè)例子2
        • 舉個(gè)例子3
      • 函數(shù)作為參數(shù)
        • lambda表達(dá)式
          • 舉個(gè)例子1
        • 內(nèi)置高階函數(shù)
          • filter
          • map
          • sorted
          • max
      • 函數(shù)作為返回值


函數(shù)式編程

  • 定義

函數(shù)式編程可以用一系列函數(shù)解決問題。

  • 說明

①函數(shù)可以賦值給變量,賦值后變量綁定函數(shù)。
②允許將函數(shù)作為參數(shù)傳入另一個(gè)函數(shù)。
③允許函數(shù)返回一個(gè)函數(shù)。

  • 高階函數(shù)

高階函數(shù)是將函數(shù)作為參數(shù)或返回值的函數(shù)

舉個(gè)例子1

看下面這段代碼:

def fun01():print("fun01執(zhí)行")#將fun01方法賦值給變量a(并沒有執(zhí)行fun01) a = fun01

結(jié)果:

由以上代碼和結(jié)果可知,當(dāng)我們把fun01直接賦值給a時(shí),方法fun01不執(zhí)行,且變量a得到了方法fun01的地址。

為了驗(yàn)證一下我們所說的言論,我們調(diào)用一下變量a, 間接執(zhí)行函數(shù)fun01:

def fun01():print("fun01執(zhí)行")#將fun01方法賦值給變量a(并沒有執(zhí)行fun01) a = fun01a()

結(jié)果:

舉個(gè)例子2

看下面這段代碼:

def fun01():print("fun01執(zhí)行")def fun02(func):print("fun02執(zhí)行")func()

我們看到函數(shù)fun02有一個(gè)參數(shù)func, 這個(gè)參數(shù)可以被調(diào)用。對于fun02的定義者而言,并不需要知道func的具體邏輯是什么。

我們將fun01作為方法fun02的參數(shù)func進(jìn)行傳遞:

結(jié)果:

舉個(gè)例子3

我有下面這個(gè)列表:


我們有很多需求,現(xiàn)在,我們寫出一些方法來處理這些需求:

這時(shí),我們發(fā)現(xiàn)大量代碼是重復(fù)的,只不過有些if條件不一樣。對于相同的代碼,我們要提取; 對于不同的代碼,我們要封裝。

首先,我們提取相同點(diǎn):


我們再提取不同點(diǎn):


現(xiàn)在,我們要將不同點(diǎn)”封裝”起來,即將不同點(diǎn)提取到方法中:


我們再將相同點(diǎn),設(shè)計(jì)成一個(gè)可以將我們的條件函數(shù)conditionXX作為參數(shù)傳入的方法:

備注:函數(shù)式編程的這種思想,也影射出了面向?qū)ο蟮姆侄沃乃枷搿?/p>

運(yùn)行一下代碼:


結(jié)果:

函數(shù)作為參數(shù)

lambda表達(dá)式

  • 定義

lambda表達(dá)式是一種匿名方法。

  • 作用

①lambda表達(dá)式作為參數(shù)傳遞時(shí),語法簡潔,優(yōu)雅,代碼可讀性強(qiáng)。
②lambda表達(dá)式可隨時(shí)創(chuàng)建和銷毀,減少程序耦合度。

  • 語法

定義lambda表達(dá)式:

變量 = lambda 形參:方法體

調(diào)用lambda表達(dá)式:

變量(實(shí)參)
  • 說明

①形參沒有可以不填
②方法體只能有一條語句,且不支持賦值語句。

舉個(gè)例子1

首先我們寫幾個(gè)函數(shù),并把它們分別改為lambda表達(dá)式:

①不帶參數(shù)

代碼:

我們再分別調(diào)用a01變量和fun01()方法,如下:

結(jié)果:

②帶參數(shù)

我們先看一下lambda表達(dá)式的語法:

備注:方法體只能有一個(gè),但參數(shù)可以有多個(gè)

代碼:

我們再分別調(diào)用a02變量和fun02()方法,如下:

結(jié)果:

③有返回值

代碼:

我們再分別調(diào)用a03變量和fun03()方法,如下:

結(jié)果:

為什么要改寫成lambda表達(dá)式?
原因就是,lambda表達(dá)式,沒有名字(所以我們有時(shí)候也稱其為匿名方法)它可以使我們的程序更加簡潔;且,當(dāng)我們只想把一個(gè)方法作為參數(shù)進(jìn)行傳遞,但是不希望直接調(diào)用這個(gè)方法時(shí)(這個(gè)方法活著的價(jià)值就是傳參),我們就可以用lambda表達(dá)式。

最后備注:如果我們看見一大段相似的代碼,但是其中的計(jì)算方式(算法)不一樣。我們就應(yīng)該將算法提取出去(lambda表達(dá)式),將共性保留下來(保留成靜態(tài)函數(shù))。

內(nèi)置高階函數(shù)

高階函數(shù),即將函數(shù)作為參數(shù)或返回值的函數(shù)。
對于一些內(nèi)置的高階函數(shù),在下面的筆記中,每一個(gè)內(nèi)置高階函數(shù)我都舉個(gè)例子,大概就能明白了,不明白,請自行看文檔/百度。

filter
  • 舉個(gè)例子

先定義Enemy類和創(chuàng)建Enemy對象列表(這些class和列表在下面的內(nèi)置高階函數(shù)的例子中也會(huì)用到):

過濾:

結(jié)果:

map
  • 舉個(gè)例子

映射:


結(jié)果:

sorted
  • 舉個(gè)例子

①降序排序(需要用變量接收返回值)

結(jié)果:

②升序排序(需要用變量接收返回值)

結(jié)果:

max
  • 舉個(gè)例子

最大值:

結(jié)果:

函數(shù)作為返回值

未完待續(xù),暫時(shí)不想寫了。

總結(jié)

以上是生活随笔為你收集整理的python基础(part17)--函数式编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。