一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Python 高級(jí)教程之函數(shù)

 海擁 2022-05-01 發(fā)布于安徽
  • 💂 個(gè)人網(wǎng)站:【 海擁 】【摸魚(yú)小游戲
  • 🤟 風(fēng)趣幽默的人工智能學(xué)習(xí)網(wǎng)站:👉人工智能
  • 💅 想尋找共同學(xué)習(xí)交流的小伙伴,請(qǐng)點(diǎn)擊【全棧技術(shù)交流群
  • 💬 便宜且實(shí)用的計(jì)算機(jī)相關(guān)書(shū)籍:👉進(jìn)來(lái)逛逛

函數(shù)式編程是一種編程范式,我們?cè)谄渲袊L試以純數(shù)學(xué)函數(shù)風(fēng)格綁定所有內(nèi)容。它是一種聲明式的編程風(fēng)格。它的主要焦點(diǎn)是“要解決什么”,而命令式風(fēng)格的主要焦點(diǎn)是“如何解決”。它使用表達(dá)式而不是語(yǔ)句。計(jì)算表達(dá)式以產(chǎn)生值,而執(zhí)行語(yǔ)句以分配變量。

函數(shù)式編程的概念

任何函數(shù)式編程語(yǔ)言都應(yīng)該遵循這些概念。

  • 純函數(shù):這些函數(shù)有兩個(gè)主要屬性。首先,它們總是為相同的參數(shù)產(chǎn)生相同的輸出,而不管其他任何事情。其次,它們沒(méi)有副作用,即它們確實(shí)修改了任何參數(shù)或全局變量或輸出了一些東西。
  • 遞歸:函數(shù)式語(yǔ)言中沒(méi)有“for”或“while”循環(huán)。函數(shù)式語(yǔ)言中的迭代是通過(guò)遞歸實(shí)現(xiàn)的。
  • 函數(shù)是一等的并且可以是高階的:一等函數(shù)被視為一等變量。第一類變量可以作為參數(shù)傳遞給函數(shù),可以從函數(shù)返回或存儲(chǔ)在數(shù)據(jù)結(jié)構(gòu)中。
  • 變量是不可變的:在函數(shù)式編程中,我們不能在變量初始化后對(duì)其進(jìn)行修改。我們可以創(chuàng)建新變量——但我們不能修改現(xiàn)有變量。

Python 中的函數(shù)式編程

Python 也支持函數(shù)式編程范式,而無(wú)需任何特殊功能或庫(kù)的支持。

純函數(shù)

如上所述,純函數(shù)有兩個(gè)屬性。

  • 它總是為相同的參數(shù)產(chǎn)生相同的輸出。例如,無(wú)論如何,3+7 永遠(yuǎn)是 10。
  • 它不會(huì)更改或修改輸入變量。

第二個(gè)屬性也稱為不變性。純函數(shù)的唯一結(jié)果是它返回的值。它們是確定性的。使用函數(shù)式編程完成的程序很容易調(diào)試,因?yàn)榧兒瘮?shù)沒(méi)有副作用或隱藏的 I/O。純函數(shù)還可以更輕松地編寫(xiě)并行/并發(fā)應(yīng)用程序。當(dāng)代碼以這種風(fēng)格編寫(xiě)時(shí),智能編譯器可以做很多事情——它可以并行化指令,在需要時(shí)等待評(píng)估結(jié)果,并記住結(jié)果,因?yàn)橹灰斎氩桓淖?#xff0c;結(jié)果就永遠(yuǎn)不會(huì)改變。

例子

# 演示純函數(shù)的 Python 程序


# 一個(gè)不改變輸入列表并返回新列表的純函數(shù)
def pure_func(List):

    New_List = []

    for i in List:
        New_List.append(i**2)
        
    return New_List

# 驅(qū)動(dòng)程序代碼
Original_List = [1, 2, 3, 4]
Modified_List = pure_func(Original_List)

print("Original List:", Original_List)
print("Modified List:", Modified_List)

輸出:

Original List: [1, 2, 3, 4]
Modified List: [1, 4, 9, 16]

遞歸

在函數(shù)式編程中,沒(méi)有 for 循環(huán)或 while 循環(huán)的概念,而是使用遞歸。遞歸是一個(gè)函數(shù)直接或間接調(diào)用自身的過(guò)程。在遞歸程序中,提供了基本情況的解決方案,而較大問(wèn)題的解決方案則用較小的問(wèn)題來(lái)表示??赡軙?huì)出現(xiàn)一個(gè)問(wèn)題,什么是基本情況?基本情況可以被認(rèn)為是告訴編譯器或解釋器退出函數(shù)的條件。

示例:讓我們考慮一個(gè)程序,該程序?qū)⒃诓皇褂萌魏?for 循環(huán)的情況下找到列表中所有元素的總和。

# 演示遞歸的 Python 程序


# 遞歸函數(shù)查找列表的總和
def Sum(L, i, n, count):

    # Base case
    if n <= i:
        return count

    count += L[i]

    # 進(jìn)入遞歸
    count = Sum(L, i + 1, n, count)

    return count

# 驅(qū)動(dòng)程序代碼
L = [1, 2, 3, 4, 5]
count = 0
n = len(L)
print(Sum(L, 0, n, count))

輸出

15

函數(shù)是一等的,可以是高階的

一等的對(duì)象自始至終統(tǒng)一處理。它們可以存儲(chǔ)在數(shù)據(jù)結(jié)構(gòu)中,作為參數(shù)傳遞,或者在控制結(jié)構(gòu)中使用。如果一種編程語(yǔ)言將函數(shù)視為一等對(duì)象,則稱其支持一等函數(shù)。

一等函數(shù)的性質(zhì)

  • 函數(shù)是 Object 類型的實(shí)例。
  • 你可以將函數(shù)存儲(chǔ)在變量中。
  • 你可以將函數(shù)作為參數(shù)傳遞給另一個(gè)函數(shù)。
  • 你可以從函數(shù)返回函數(shù)。
  • 你可以將它們存儲(chǔ)在數(shù)據(jù)結(jié)構(gòu)中,例如哈希表、列表……
# 演示高階函數(shù)的 Python 程序


def shout(text):
    return text.upper()

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

    def greet(func):
    # 將函數(shù)存儲(chǔ)在變量中
    greeting = func("嗨,我是由作為參數(shù)傳遞的函數(shù)創(chuàng)建的。")
    print(greeting)

greet(shout)
greet(whisper)

輸出

嗨,我是由作為參數(shù)傳遞的函數(shù)創(chuàng)建的。
嗨,我是由作為參數(shù)傳遞的函數(shù)創(chuàng)建的。

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

為了使列表和迭代器等可迭代對(duì)象的處理更加容易,Python 實(shí)現(xiàn)了一些常用的高階函數(shù)。這些函數(shù)返回一個(gè)節(jié)省空間的迭代器。一些內(nèi)置的高階函數(shù)是:

  • Map(): map() 函數(shù)在將給定函數(shù)應(yīng)用于給定迭代(列表、元組等)的每個(gè)項(xiàng)目后返回結(jié)果列表

語(yǔ)法: map(fun, iter)

參數(shù)
fun:這是一個(gè)函數(shù),map 將給定迭代的每個(gè)元素傳遞給該函數(shù)。
iter:它是一個(gè)要被映射的可迭代對(duì)象。

返回類型:返回 map 類的迭代器。

例子

# 用于演示 map 工作的 Python 程序。

# Return double of n
def addition(n):
    return n + n

# 我們使用 map() 將所有數(shù)字翻倍
numbers = (1, 2, 3, 4)
results = map(addition, numbers)

# 不打印值
print(results)

# 打印值
for result in results:
    print(result, end = " ")

輸出

<map object at 0x7fae3004b630>
2 4 6 8 
  • filter(): filter() 方法在一個(gè)函數(shù)的幫助下過(guò)濾給定的序列,該函數(shù)測(cè)試序列中的每個(gè)元素是否為真。

語(yǔ)法:過(guò)濾器(函數(shù),序列)
參數(shù)
function:測(cè)試序列的每個(gè)元素是否為真的函數(shù)。
sequence:需要過(guò)濾的序列,可以是集合、列表、元組或任何迭代器的容器。

返回類型:返回一個(gè)已經(jīng)過(guò)濾的迭代器。

例子

# 演示過(guò)濾器工作的 Python 程序。

# 過(guò)濾元音的函數(shù)
def fun(variable):

    letters = ['a', 'e', 'i', 'o', 'u']

    if (variable in letters):
        return True
    else:
        return False


# sequence
sequence = ['g', 'e', 'e', 'j', 'k', 's', 'p', 'r']

# 使用過(guò)濾功能
filtered = filter(fun, sequence)

print('過(guò)濾后的字母是:')

for s in filtered:
    print(s)

輸出

過(guò)濾后的字母是:
e 
e

Lambda 函數(shù):在 Python 中,匿名函數(shù)意味著函數(shù)沒(méi)有名稱。我們已經(jīng)知道 def 關(guān)鍵字用于定義普通函數(shù),而 lambda 關(guān)鍵字用于創(chuàng)建匿名函數(shù)。

語(yǔ)法

lambda 參數(shù):表達(dá)式

  1. 這個(gè)函數(shù)可以有任意數(shù)量的參數(shù),但只有一個(gè)表達(dá)式,它被計(jì)算并返回。
  2. 任何需要函數(shù)對(duì)象的地方都可以免費(fèi)使用 lambda 函數(shù)。
  3. 你需要了解 lambda 函數(shù)在語(yǔ)法上僅限于單個(gè)表達(dá)式。
  4. 除了函數(shù)中的其他類型的表達(dá)式外,它在特定的編程領(lǐng)域有多種用途。

例子

# 演示 lambda 的 Python 代碼

cube = lambda x: x * x*x
print(cube(7))

L = [1, 3, 2, 4, 5, 6]
is_even = [x for x in L if x % 2 == 0]

print(is_even)

輸出

343 
[2, 4, 6]

不變性

不變性是一種可用于調(diào)試的函數(shù)式編程范例,因?yàn)樗鼤?huì)在變量被更改而不是值被更改的地方引發(fā)錯(cuò)誤。Python 也支持一些不可變的數(shù)據(jù)類型,如字符串、元組、數(shù)字等。

例子

# 演示不可變數(shù)據(jù)類型的 Python 程序

# 字符串?dāng)?shù)據(jù)類型
immutable = "Haiyong"

# 更改值將引發(fā)錯(cuò)誤
immutable[1] = 'K'

輸出

Traceback (most recent call last):
  File "/home/ee8bf8d8f560b97c7ec0ef080a077879.py", line 10, in 
    immutable[1] = 'K'
TypeError: 'str' object does not support item assignment

函數(shù)式編程和面向?qū)ο缶幊痰膮^(qū)別

當(dāng)你對(duì)事物有一組固定的操作時(shí),面向?qū)ο蟮恼Z(yǔ)言是很好的,并且隨著代碼的發(fā)展,你主要是添加新事物。這可以通過(guò)添加實(shí)現(xiàn)現(xiàn)有方法的新類來(lái)完成,而現(xiàn)有類則不作任何處理。

當(dāng)你有一組固定的東西時(shí),函數(shù)式語(yǔ)言是很好的,并且隨著你的代碼的發(fā)展,你主要是在現(xiàn)有的東西上添加新的操作。這可以通過(guò)添加使用現(xiàn)有數(shù)據(jù)類型進(jìn)行計(jì)算的新函數(shù)來(lái)完成,而現(xiàn)有函數(shù)將被單獨(dú)保留。

函數(shù)編程面向?qū)ο缶幊?/th>
這種編程范式強(qiáng)調(diào)函數(shù)的使用,其中每個(gè)函數(shù)都執(zhí)行特定的任務(wù)。這種編程范式基于面向?qū)ο蟮母拍?。在?chuàng)建對(duì)象實(shí)例的地方使用類
使用的基本元素是變量和函數(shù)。函數(shù)中的數(shù)據(jù)是不可變的(創(chuàng)建后無(wú)法更改)。使用的基本元素是對(duì)象和方法,這里使用的數(shù)據(jù)是可變數(shù)據(jù)。
它遵循聲明式編程模型。它遵循命令式編程模型。
它使用遞歸進(jìn)行迭代。它使用循環(huán)進(jìn)行迭代。
它支持并行編程。它不支持并行編程。
此編程范例中的語(yǔ)句在執(zhí)行時(shí)不需要遵循特定的順序。這種編程范式中的語(yǔ)句需要遵循一個(gè)順序,即執(zhí)行時(shí)自底向上的方法。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    黄片免费观看一区二区| 性欧美唯美尤物另类视频| 久久91精品国产亚洲| 亚洲国产成人久久99精品| 沐浴偷拍一区二区视频| 亚洲欧美日本视频一区二区| 中文字幕精品一区二区年下载| 亚洲欧美黑人一区二区| 国产又大又黄又粗的黄色| 国产精品十八禁亚洲黄污免费观看| 国产高清一区二区不卡| 欧美一区二区三区不卡高清视| 一区二区不卡免费观看免费| 精品人妻精品一区二区三区| 久久永久免费一区二区| 欧美成人欧美一级乱黄| 一区二区福利在线视频| 激情亚洲一区国产精品久久| 欧美午夜国产在线观看| 亚洲精品一二三区不卡| 国产精品久久久久久久久久久痴汉| 亚洲一区二区三区中文久久| 欧洲日本亚洲一区二区| 日本黄色录像韩国黄色录像| 欧美日韩亚洲国产av| 久久女同精品一区二区| 亚洲黑人精品一区二区欧美| 国产欧美一区二区三区精品视| 2019年国产最新视频| 久草热视频这里只有精品| 欧美成人黄色一区二区三区| 日韩特级黄片免费观看| 亚洲精品深夜福利视频| 日韩精品第一区二区三区| 免费一区二区三区少妇| 欧美黄色成人真人视频| 久久精品亚洲精品国产欧美| 国产午夜福利在线观看精品| 亚洲视频一区自拍偷拍另类| 欧美国产日本免费不卡| 亚洲欧美日韩在线中文字幕|