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

簡析Python函數(shù)式編程字符串和元組及函數(shù)分類與高階函數(shù)

 更新時間:2021年09月13日 16:40:55   作者:夢想橡皮擦  
這篇文章主要介紹了Python函數(shù)式編程中的字符串、元組及函數(shù)分類與高階函數(shù),有需要的朋友可以借鑒參考下,希望能夠有所幫助

函數(shù)式編程中的字符串

在函數(shù)式編程中,經(jīng)常用到 Python 字符串,因其是不可變數(shù)據(jù)結(jié)構(gòu)。

字符串本身是一個對象,具備很多對象方法,與常識中函數(shù)的使用不太相同,例如下述代碼

my_str = "xiangpica"
print(my_str.upper())
print(len(my_str.upper()))

其中 len() 函數(shù)的用法被稱為前置寫法,而 my_str.upper() 被稱為后置寫法,這樣很容易造成函數(shù)式編程的理解問題,所以需要系統(tǒng)性的解決該問題。

如果上述代碼可以修改為 len(upper(my_str)),就變得相對容易理解。

# 類型 Text 是 str 的別名
from typing import Text
my_str = "xiangpica"
def upper(str: Text) -> Text:
    return str.upper()
print(upper(my_str))
print(len(upper(my_str)))

上述代碼重新定義了一個前置用法的函數(shù) upper,用于解決函數(shù)式編程中的一致性問題,該解決辦法在后續(xù)代碼中會經(jīng)常出現(xiàn)。

不變類型元組

除字符串外,Python 中的另一個不可變數(shù)據(jù)類型為元組,元組分為普通元組與命名元組。

普通元組的聲明與訪問

在之前的文章中對元組的基本知識,已經(jīng)進(jìn)行了說明,可以去稍微復(fù)習(xí)一下,然后在進(jìn)入本文的學(xué)習(xí)。

先看一下代碼,然后再判斷是否可以理解。

from typing import Tuple, Text, Callable
LANGUAGE = Tuple[Text, Text, Text]
python: Callable[[LANGUAGE], Text] = lambda languages: languages[1]
items = ("c","python","js")
a = python(items)
print(a)

上述代碼定義了一個新的類型 LANGUAGE,該類型是一個元組,具備三個元素。

python 類型注解是 Callable[[LANGUAGE], Text],即它的參數(shù)是 LANGUAGE 類型,返回值是字符串類型。

注意 typing 模塊加入不會影響程序的運行不會報正式的錯誤,僅作為類型檢查,防止運行時出現(xiàn)參數(shù)、返回值類型不符,開發(fā)人員查閱。

除上述內(nèi)容外,還可以使用命名元組來實現(xiàn)。

from collections import  namedtuple
Language = namedtuple("Language",("name1", "name2", "name3"))
l = Language("c", "python", "js")
print(l)
print(l.name1)

或者直接使用 typing 模塊的 NamedTuple 也可以。

from typing import NamedTuple, Text
class Language(NamedTuple):
    name: Text
    description: Text
l = Language("C", "C語言")
print(l)
print(l.name)
print(l.description)

函數(shù)式的分類

函數(shù)大類分為兩種:

  • 標(biāo)量函數(shù):函數(shù)的返回結(jié)果為一個值;
  • 集合函數(shù):函數(shù)的結(jié)果為可迭代的集合。

集合函數(shù)也可以細(xì)分:

  • 規(guī)約/累積函數(shù):將集合內(nèi)的元素進(jìn)行累積計算,最后得到一個值;
  • 映射函數(shù):將標(biāo)量函數(shù)應(yīng)用于幾個的每個元素,最后得到一個與原集合相同長度的新集合;
  • 過濾函數(shù):將標(biāo)量函數(shù)應(yīng)用于每個元素,保留一部分,得到一個子集。

有了上述概念之后,對于函數(shù)式編程的理解可以更進(jìn)一步。

any() 、all() 、len()、sum() 對比學(xué)習(xí)

anyall 兩個函數(shù)屬于規(guī)約函數(shù),進(jìn)行的操作叫做布爾規(guī)約,即將一個集合的元素歸約為 True 或者 False,all 需要所有值都是 True,any 只要有一個值是 True 即可。

lensum 也是歸約函數(shù),它們分別表示計算集合中所有值的個數(shù)和匯總值。

zip()、reversed()、enumerate()

zip 函數(shù)可以把多個可迭代對象或者序列,之間的數(shù)據(jù)進(jìn)行交叉組合,即將 n 個元素的可迭代對象轉(zhuǎn)換為 n 元組,然后返回一個生成器。

如果 zip 函數(shù)沒有輸入?yún)?shù),那將返回一個空列表 []。

a = zip()
print(list(a))

reversed 函數(shù)用于改變序列順序,即反轉(zhuǎn)序列。

enumerate 函數(shù)獲取序列或者可迭代對象的下標(biāo)值,轉(zhuǎn)換成概念描述就是將可迭代對象映射為二元組序列(帶上序號了),每個二元組序列中,第一個元素是下標(biāo)值,第二個元素是值本身。

高階函數(shù)

學(xué)習(xí) Python 函數(shù)式編程,繞不開高階函數(shù)的學(xué)習(xí),高階函數(shù)就是以函數(shù)為參數(shù),或者以返回值為函數(shù)的函數(shù)。

函數(shù) max 和 min()

上述兩個函數(shù)是規(guī)約函數(shù),即輸入的是集合,輸出的是單個值,主要用途就是尋找極值。

一般在學(xué)習(xí)的時候,可以把二者當(dāng)成普通的函數(shù),也可用于高階函數(shù),主要為參數(shù)位置的差異。

最簡單的用法為:

max_num = max(1, 2, 3, 4)
min_num = min(1, 2, 3, 4)
print(max_num)
print(min_num)

接下來就是其高階函數(shù)模式的實現(xiàn),自定義比較規(guī)則。

# 第一種寫法,比較字符串長度
max_num = max("a", "abc", "ceda", "aaaaa", key=lambda x: len(x))
min_num = min("a", "abc", "ceda", "aaaaa", key=lambda x: len(x))
print(max_num)
print(min_num)
# 第二種寫法,比較字符串長度
max_num = max(["a", "abc", "ceda", "aaaaa"], key=lambda x: len(x))
min_num = min(["a", "abc", "ceda", "aaaaa"], key=lambda x: len(x))
print(max_num)
print(min_num)

上述代碼的 key 為可選參數(shù),默認(rèn)值為 None。

map 函數(shù)

map 函數(shù)用于將一個集合映射到另一個集合,例如可以將一個由字符串組成的列表中的每一項,都轉(zhuǎn)換為整數(shù)。

data = ["1", "2", "3"]
print(map(int, data))
print(list(map(int, data)))

代碼 map(int, data) 的含義就是將 int 函數(shù)作用于 data 中的每一項。

map 函數(shù)的第一個參數(shù)也可以用 lambda 代替。

data = ["1", "2", "3"]
print(map(lambda x: int(x), data))
print(list(map(int, data)))

filter 函數(shù)

filter 函數(shù)主要用于將一個**判定函數(shù)(謂語函數(shù))**用于集合的每一個元素,最后得到滿足判定函數(shù)的結(jié)果集,測試代碼如下:

data = [1, 3, 5, 7, 9]
print(filter(lambda x: x > 3, data))
print(list(filter(lambda x: x > 3, data)))

sorted 函數(shù)

sorted 函數(shù)也支持高階函數(shù) key 參數(shù)定制規(guī)則。

result = sorted(["afghsss", "abc", "ceda", "aaaaa"], key=lambda x: len(x))
print(result)

同一需求的不同效率問題

通過 map 函數(shù),生成器表達(dá)式,存在迭代器的生成器函數(shù)分別多 一億 數(shù)據(jù)量的列表進(jìn)行測試。

import time
def demo(x):
    return x * 2
def demo1(f, l):
    for x in l:
        yield f(x)
my_list = list(range(1, 10000000))
start = time.perf_counter()
# map(lambda x: x * 2, my_list) # 程序運行耗時 3.904999999998493e-06
# (demo(x) for x in my_list) # 程序運行耗時 6.310000000009364e-06
demo1(demo, my_list) # 程序運行耗時 5.1070000000041915e-06
cost_time = time.perf_counter() - start
print("程序運行耗時", cost_time)

得到的結(jié)果是 map 最快,所以用就完事了。

以上就是簡析Python函數(shù)式編程字符串和元組及函數(shù)分類與高階函數(shù)的詳細(xì)內(nèi)容,更多關(guān)于Python函數(shù)式編程的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 在Python文件中指定Python解釋器的方法

    在Python文件中指定Python解釋器的方法

    今天小編就為大家分享一篇在Python文件中指定Python解釋器的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • Python?4種實現(xiàn)定時任務(wù)的方案

    Python?4種實現(xiàn)定時任務(wù)的方案

    這篇文章主要給大家分享了Python?4種實現(xiàn)定時任務(wù)的方案,運用 while True: + sleep()、Timeloop 庫、threading.Timer 、內(nèi)置模塊 sched ,下面就來看看具體的實現(xiàn)過程吧
    2021-12-12
  • Python中requests模塊的請求參數(shù)詳解

    Python中requests模塊的請求參數(shù)詳解

    這篇文章主要介紹了Python中requests模塊的請求參數(shù)詳解,requests模塊是一個網(wǎng)絡(luò)請求模塊,可以幫助我們模擬成客戶端去請求服務(wù)器的數(shù)據(jù),我們今天就是主要針對這個模塊進(jìn)行學(xué)習(xí),需要的朋友可以參考下
    2023-08-08
  • 關(guān)于python變量的引用以及在底層存儲原理

    關(guān)于python變量的引用以及在底層存儲原理

    Python的變量,簡單來說有數(shù)值型,布爾型,字符串類型,列表,元組,字典等6大類。那么不同變量類型在底層是如何存儲的,關(guān)系到變量的引用,能否正確的掌握變量的相關(guān)操作?接下來小編就來為大家講解python變量的引用以及在底層存儲原理,需要的朋友可以參考一下
    2021-09-09
  • python中的字典詳細(xì)介紹

    python中的字典詳細(xì)介紹

    這篇文章主要介紹了python中的字典詳細(xì)介紹,字典是Python中最強大的數(shù)據(jù)類型之一,本文講解了什么是字典、創(chuàng)建字典和給字典賦值 、字典的基本操作、映射類型操作符、映射相關(guān)的函數(shù)、字典的方法等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • OpenCV-Python實現(xiàn)人臉美白算法的實例

    OpenCV-Python實現(xiàn)人臉美白算法的實例

    人臉美白原理說透了,就是一種圖像的顏色空間處理,所以我們需要通過顏色空間進(jìn)行設(shè)計。本文就詳細(xì)的介紹一下,感興趣的可以了解一下
    2021-06-06
  • python實現(xiàn)簡單銀行管理系統(tǒng)

    python實現(xiàn)簡單銀行管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)簡單銀行管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Python比較兩個圖片相似度的方法

    Python比較兩個圖片相似度的方法

    這篇文章主要介紹了Python比較兩個圖片相似度的方法,涉及Python操作pil模塊實現(xiàn)圖片比較的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • Python實現(xiàn)簡單生成驗證碼功能【基于random模塊】

    Python實現(xiàn)簡單生成驗證碼功能【基于random模塊】

    這篇文章主要介紹了Python實現(xiàn)簡單生成驗證碼功能,結(jié)合實例形式分析了Python基于random模塊生成隨機字符串的相關(guān)操作技巧,需要的朋友可以參考下
    2018-02-02
  • Python中的localtime()方法使用詳解

    Python中的localtime()方法使用詳解

    這篇文章主要介紹了Python中的localtime()方法使用詳解,是Python入門學(xué)習(xí)的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05

最新評論