最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中函數(shù)式編程的入門(mén)指南詳解

 更新時(shí)間:2026年04月24日 08:20:42   作者:小莊-Python辦公  
本文介紹了函數(shù)式編程(FP)的核心概念及其在Python中的應(yīng)用,特別適合非計(jì)算機(jī)科班轉(zhuǎn)碼者學(xué)習(xí),下面小編就來(lái)和大家詳細(xì)講講Python函數(shù)式編程的核心概念和具體應(yīng)用吧

引言:為什么非科班出身要懂函數(shù)式編程?

很多非計(jì)算機(jī)科班(比如文科、商科、傳統(tǒng)工科)轉(zhuǎn)碼的朋友,在剛接觸編程時(shí),往往會(huì)被復(fù)雜的“面向?qū)ο螅∣OP)”、“類(lèi)”、“實(shí)例”、“繼承”繞暈。其實(shí),編程不只有這一種思維方式。

今天,我們來(lái)聊聊另一種極其優(yōu)雅、邏輯性極強(qiáng),且對(duì)數(shù)學(xué)/邏輯思維非常友好的編程范式——函數(shù)式編程(Functional Programming, 簡(jiǎn)稱(chēng) FP)

什么是函數(shù)式編程?

簡(jiǎn)單來(lái)說(shuō),函數(shù)式編程就是把電腦運(yùn)算視為“數(shù)學(xué)上的函數(shù)計(jì)算”,并且避免使用程序狀態(tài)以及易變對(duì)象。聽(tīng)起來(lái)有點(diǎn)抽象?沒(méi)關(guān)系,我們用大白話(huà)來(lái)拆解它的三大核心理念。

核心一:函數(shù)是一等公民 (First-Class Functions)

在 Python 中,函數(shù)不僅僅是一段執(zhí)行代碼,它就像普通的變量一樣:

  • 可以賦值給其他變量
  • 可以作為參數(shù)傳遞給另一個(gè)函數(shù)
  • 可以作為另一個(gè)函數(shù)的返回值
# 示例:把函數(shù)當(dāng)成變量傳給另一個(gè)函數(shù)
def shout(text):
    return text.upper()

def whisper(text):
    return text.lower()

def greet(func, message):
    print(func(message))

greet(shout, "Hello World")  # 輸出: HELLO WORLD
greet(whisper, "Hello World") # 輸出: hello world

核心二:純函數(shù) (Pure Functions)

純函數(shù)有兩個(gè)鐵律:

  1. 輸入決定輸出:給定相同的輸入,永遠(yuǎn)返回相同的輸出。
  2. 沒(méi)有副作用(No Side Effects):函數(shù)執(zhí)行過(guò)程中,不會(huì)修改外部的變量,也不會(huì)和外界(如數(shù)據(jù)庫(kù)、文件系統(tǒng)、全局變量)發(fā)生意料之外的交互。

反面教材(非純函數(shù)):

total = 0
def add_to_total(x):
    global total
    total += x  # 修改了外部變量(副作用)
    return total

正面教材(純函數(shù)):

def add(x, y):
    return x + y  # 只依賴(lài)輸入,不影響外界

純函數(shù)的好處在于極其容易測(cè)試和調(diào)試,這對(duì)于非科班新手來(lái)說(shuō)簡(jiǎn)直是福音——你再也不用去猜到底是哪個(gè)角落的變量被誰(shuí)偷偷改掉了!

核心三:不可變性 (Immutability)

在函數(shù)式編程中,數(shù)據(jù)一旦創(chuàng)建就不能改變。如果需要修改數(shù)據(jù),那就創(chuàng)建一個(gè)包含新變化的新數(shù)據(jù)。
雖然 Python 原生并沒(méi)有嚴(yán)格強(qiáng)制不可變性(比如列表是可以被修改的),但在運(yùn)用 FP 思想時(shí),我們應(yīng)盡量避免直接修改原數(shù)據(jù)。

Python 中的函數(shù)式“三劍客”

Python 雖然不是純粹的函數(shù)式語(yǔ)言(如 Haskell),但它內(nèi)置了非常強(qiáng)大的函數(shù)式編程工具。掌握它們,你的代碼會(huì)瞬間變得簡(jiǎn)潔且高大上。

1.map():批量轉(zhuǎn)換

把一個(gè)函數(shù)應(yīng)用到一個(gè)序列的所有元素上。

場(chǎng)景:把列表里的每個(gè)數(shù)字都平方。

傳統(tǒng)寫(xiě)法(命令式):

numbers = [1, 2, 3, 4]
squared = []
for n in numbers:
    squared.append(n ** 2)

函數(shù)式寫(xiě)法:

numbers = [1, 2, 3, 4]
# lambda 是一種匿名函數(shù),表示輸入 x,返回 x 的平方
squared = list(map(lambda x: x ** 2, numbers))

2.filter():智能過(guò)濾

根據(jù)指定的函數(shù),過(guò)濾掉序列中不符合條件的元素。

場(chǎng)景:挑出列表里的偶數(shù)。

傳統(tǒng)寫(xiě)法:

numbers = [1, 2, 3, 4, 5, 6]
evens = []
for n in numbers:
    if n % 2 == 0:
        evens.append(n)

函數(shù)式寫(xiě)法:

numbers = [1, 2, 3, 4, 5, 6]
evens = list(filter(lambda x: x % 2 == 0, numbers))

3.reduce():歸約聚合

把序列前兩個(gè)元素傳給函數(shù),得到結(jié)果后,再與第三個(gè)元素進(jìn)行累積計(jì)算,直到遍歷完整個(gè)序列。(注意:在 Python 3 中需要從 functools 模塊導(dǎo)入)

場(chǎng)景:計(jì)算列表中所有數(shù)字的乘積。

from functools import reduce

numbers = [1, 2, 3, 4]
product = reduce(lambda x, y: x * y, numbers)
# 計(jì)算過(guò)程: (((1 * 2) * 3) * 4) = 24

Pythonic 的進(jìn)階:列表推導(dǎo)式 (List Comprehensions)

雖然 mapfilter 很有函數(shù)式味道,但在 Python 社區(qū),更推薦使用列表推導(dǎo)式,它被認(rèn)為更加 “Pythonic”(符合 Python 的設(shè)計(jì)哲學(xué)),同時(shí)兼具函數(shù)式編程的聲明式特點(diǎn)。

numbers = [1, 2, 3, 4, 5, 6]
# 相當(dāng)于 map + filter: 把所有偶數(shù)挑出來(lái)并求平方
result = [x ** 2 for x in numbers if x % 2 == 0]

是不是既好讀又優(yōu)雅?

給轉(zhuǎn)碼新手的建議

  1. 不要陷入教條:Python 支持多范式編程(面向?qū)ο?+ 函數(shù)式 + 過(guò)程式)。不要為了函數(shù)式而函數(shù)式,哪種方式讓代碼最易讀、最好維護(hù),就用哪種。
  2. 多用無(wú)副作用的函數(shù):即使你寫(xiě)的是面向?qū)ο蟮拇a,在類(lèi)的方法中盡量保持“純函數(shù)”的特性,這會(huì)大幅降低 Bug 產(chǎn)生的概率,對(duì)初學(xué)者調(diào)試非常友好。
  3. 擁抱數(shù)據(jù)管道思維:試著把程序看作是數(shù)據(jù)流經(jīng)一系列處理管道(函數(shù)),而不是一堆在不斷改變狀態(tài)的變量。這種思維能讓復(fù)雜邏輯變得極其清晰。

結(jié)語(yǔ)

對(duì)于非科班轉(zhuǎn)碼的同學(xué),編程不僅僅是死記硬背語(yǔ)法,更是掌握解決問(wèn)題的思維方式。函數(shù)式編程提供了一種像數(shù)學(xué)公式一樣嚴(yán)謹(jǐn)、干凈的思考工具。下次寫(xiě)代碼時(shí),不妨試著少寫(xiě)幾個(gè)嵌套的 for 循環(huán),多寫(xiě)幾個(gè)純函數(shù),體會(huì)一下這種極致的簡(jiǎn)潔之美吧!

到此這篇關(guān)于Python中函數(shù)式編程的入門(mén)指南詳解的文章就介紹到這了,更多相關(guān)Python函數(shù)式編程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python?multiprocessing?共享對(duì)象的示例代碼

    Python?multiprocessing?共享對(duì)象的示例代碼

    在 Python 中使用 multiprocessing,一個(gè)新的進(jìn)程可以獨(dú)立運(yùn)行并擁有自己的內(nèi)存空間,下面通過(guò)示例代碼講解Python multiprocessing共享對(duì)象的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧
    2023-07-07
  • python/golang 刪除鏈表中的元素

    python/golang 刪除鏈表中的元素

    這篇文章主要介紹了python/golang 如何刪除鏈表中的元素,幫助大家更好的理解和使用python/golang,感興趣的朋友可以了解下
    2020-09-09
  • python實(shí)現(xiàn)兩個(gè)一維列表合并成一個(gè)二維列表

    python實(shí)現(xiàn)兩個(gè)一維列表合并成一個(gè)二維列表

    今天小編就為大家分享一篇python實(shí)現(xiàn)兩個(gè)一維列表合并成一個(gè)二維列表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • 抵御代碼復(fù)雜性使python函數(shù)更加Pythonic技巧示例詳解

    抵御代碼復(fù)雜性使python函數(shù)更加Pythonic技巧示例詳解

    這篇文章主要介紹了抵御代碼復(fù)雜性使python函數(shù)更加Pythonic技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • python中如何使用正則表達(dá)式的非貪婪模式示例

    python中如何使用正則表達(dá)式的非貪婪模式示例

    貪婪與非貪婪模式影響的是被量詞修飾的子表達(dá)式的匹配行為,下面這篇文章主要給大家介紹了關(guān)于python中如何使用正則表達(dá)式的非貪婪模式的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-10-10
  • 解決python寫(xiě)的windows服務(wù)不能啟動(dòng)的問(wèn)題

    解決python寫(xiě)的windows服務(wù)不能啟動(dòng)的問(wèn)題

    使用py2exe生成windows服務(wù)在win7下可以正常運(yùn)行,但是到了xp下面可以安裝,但是無(wú)法啟動(dòng)
    2014-04-04
  • python中partial()基礎(chǔ)用法說(shuō)明

    python中partial()基礎(chǔ)用法說(shuō)明

    這篇文章主要給大家介紹了關(guān)于python中partial()基礎(chǔ)用法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧
    2018-12-12
  • 基于logstash實(shí)現(xiàn)日志文件同步elasticsearch

    基于logstash實(shí)現(xiàn)日志文件同步elasticsearch

    這篇文章主要介紹了基于logstash實(shí)現(xiàn)日志文件同步elasticsearch,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 教你怎么用Python實(shí)現(xiàn)自動(dòng)生日祝福

    教你怎么用Python實(shí)現(xiàn)自動(dòng)生日祝福

    這篇文章主要介紹了教你怎么用Python實(shí)現(xiàn)自動(dòng)生日祝福,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • django rest framework 自定義返回方式

    django rest framework 自定義返回方式

    這篇文章主要介紹了django rest framework 自定義返回方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07

最新評(píng)論

鄂州市| 攀枝花市| 长寿区| 申扎县| 海丰县| 秭归县| 荣昌县| 陇南市| 绥宁县| 西青区| 绥芬河市| 革吉县| 彰化市| 兰坪| 泾阳县| 灵璧县| 阿尔山市| 新民市| 泊头市| 松桃| 滁州市| 固始县| 故城县| 尤溪县| 陵川县| 游戏| 白水县| 嘉义县| 清水河县| 辽阳市| 师宗县| 达尔| 柞水县| 峡江县| 酉阳| 双流县| 蓬安县| 汪清县| 克山县| 琼中| 乌苏市|