免费高清特黄a大片,九一h片在线免费看,a免费国产一级特黄aa大,国产精品国产主播在线观看,成人精品一区久久久久,一级特黄aa大片,俄罗斯无遮挡一级毛片

分享

Python 標(biāo)準(zhǔn)庫解讀.1(對應(yīng)MicroPython)

 云深無際 2021-11-03

上篇文章我們對mpy標(biāo)準(zhǔn)微庫進行了簡單的方法羅列,又因為mpy是從標(biāo)準(zhǔn)的Python庫中退化而來,那就先簡單的學(xué)習(xí)一下Python的庫。

上面的文章說了這么多,那這篇就寫這些

我這里就用3.8寫了,使用jupyter環(huán)境

array是一個高效的數(shù)組模塊,該模塊定義了一個對象類型,它可以緊湊地表示一組基本值:字符、整數(shù)、浮點數(shù)。數(shù)組是序列類型,其行為與列表非常相似,只是其中存儲的對象類型受到限制。類型是在創(chuàng)建對象時使用類型代碼指定的, 類型代碼是單個字符。定義了以下類型代碼:

筆記,記好了

mpy中支持的格式代碼:bBhHiIlLqQfd(后 2 種取決于浮點支持)。

那這個和list有什么區(qū)別呢?首先是一種序列類型,序列方法都可以在上面使用。然后數(shù)組類型的對象是固定的,不可以混合裝載

使用要先導(dǎo)入,然后一開始要指定存儲的數(shù)據(jù)類型

后面用元組傳入存儲的東西

IDE可以智能的給出方法

這里使用了一個列表的轉(zhuǎn)換方法

這個比較簡單,實驗了mpy提供的一個添加方法

請看extend的方法

array.extend(iterable)

將來自 iterable 的項添加到數(shù)組末尾。如果 iterable 是另一個數(shù)組,它必須具有 完全 相同的類型碼;否則將引發(fā) TypeError。如果 iterable 不是一個數(shù)組,則它必須為可迭代對象并且其元素必須為可添加到數(shù)組的適當(dāng)類型。

限制較多,其實數(shù)據(jù)類型相同就行。其實方法這么少,正好可以去看看實現(xiàn),誰說不是呢?

二進制之間的轉(zhuǎn)換方法,沒有什么說的

復(fù)數(shù)運算

這是完整的雙端隊列

mpy提供了兩個方法

我這里就做簡單的演示

這些方法mpy不支持而且很多方法是之后才加進來的

在看命名數(shù)組之前,需要知道一個概念,叫工廠函數(shù):

工廠函數(shù)看上去有點像函數(shù),實質(zhì)上他們是類,當(dāng)你調(diào)用它們時,實際上是生成了該類型的一個實例,就像工廠生產(chǎn)貨物一樣.

python核心編程
https://www.cr173.com/soft/10446.html

書籍的下載位置

書籍封面

當(dāng)然java里面也有這樣的概念,你可以看看

看這個,list這個函數(shù)本身就有工廠函數(shù)的能力

工廠函數(shù)是指這些內(nèi)建函數(shù)都是類對象,當(dāng)你調(diào)用它們的時候,實際上是創(chuàng)建了一個類實例,其實也可以理解成內(nèi)建函數(shù)。

https://www.zhihu.com/question/20670869

歸根結(jié)底,它源于設(shè)計模式中的一種說法,就是指你不通過類來直接構(gòu)造對象,而是通過一個函數(shù)來構(gòu)造對象,這樣允許你在函數(shù)中加入更多的控制。

懵了嗎?要是就這就懵了,那別看了~

其中命名元組賦予每個位置一個含義,提供可讀性和自文檔性。它們可以用于任何普通元組,并添加了通過名字獲取值的能力,通過索引值也是可以的。

我覺得你看例子就能看懂

其中有使用位置和關(guān)鍵字實參,可以像普通元組一樣去索引,字段可以用命去訪問,加入了__repr__的值方法。

在mpy里面是這樣使用的:

from collections import namedtuple
MyTuple = namedtuple("MyTuple", ("id", "name"))t1 = MyTuple(1, "foo")t2 = MyTuple(2, "bar")print(t1.name)assert t2.name == t2[1]

命名元組實例沒有字典,所以它們要更輕量,并且占用更小內(nèi)存。

我這個ordereddict真的不知道怎么翻譯了,反正就是可以迭代的時候(就是打印的時候可以按照你加進去的順序打印)

它會返回一個 dict 子類的實例,支持常用的 dict 方法。Ordered Dict 是一種記錄鍵首次插入順序的 dict 。如果新條目覆蓋現(xiàn)有條目,則原始插入位置保持不變。刪除一個條目并重新插入它將把它移到末尾。

這是標(biāo)準(zhǔn)Python庫

from collections import OrderedDict
d = OrderedDict([("z", 1), ("a", 2)])# More items can be added as usuald["w"] = 5d["b"] = 3for k, v in d.items(): print(k, v)

使用前記得初始化,以上為mpy

z 1a 2w 5b 3

輸出

接下來是文章中最有技術(shù)含量的東西,堆隊列算法,這個東西講起來就有學(xué)術(shù)味道了,而且還需要補充一些知識才可以。

容器:

在計算機科學(xué)中,容器是一個類或數(shù)據(jù)結(jié)構(gòu),其實例(運行實體)是其他對象的集合。換句話說,它們以遵循特定訪問規(guī)則的有組織的方式存儲對象。容器的大小取決于它包含的對象(元素)的數(shù)量。各種容器類型的底層(繼承)實現(xiàn)的大小和復(fù)雜性可能不同,并為任何給定場景選擇正確的實現(xiàn)提供了靈活性。

容器可以通過以下三個屬性來表征:

    1.access,即訪問容器對象的方式。在數(shù)組的情況下,訪問是通過數(shù)組索引完成的。在堆棧的情況下,根據(jù)LIFO(后進先出)順序進行訪問,而在隊列的情況下,根據(jù)FIFO(先進先出)順序進行訪問;

    2.storage,即容器對象的存儲方式;

    3.traversal,即遍歷容器對象的方式。

容器類應(yīng)該實現(xiàn)方法來執(zhí)行以下操作:

    1.創(chuàng)建一個空容器(構(gòu)造函數(shù));

    2.將對象插入容器;

    3.從容器中刪除對象;

    4.刪除容器中的所有對象(清除);

    5.訪問容器中的對象;

    6.訪問容器中的對象數(shù)量(計數(shù))。

    7.容器有時與迭代器一起實現(xiàn)。

注意,容器其實是一種組織形式,就是特定的操作定義。它不單單是一種數(shù)據(jù)結(jié)構(gòu),它是一種更加高層的對數(shù)據(jù)結(jié)構(gòu)的表達。

堆又是屬于隊列這種結(jié)構(gòu):

在計算機科學(xué)中,隊列是按序列維護的實體集合,可以通過在序列的一端添加實體和從序列的另一端刪除實體來修改。按照慣例,添加元素的序列末尾稱為隊列的后部、尾部或后部,刪除元素的末尾稱為隊列的頭部或前部,類似于以下使用的詞人們排隊等候商品或服務(wù)。

將元素添加到隊列尾部的操作稱為入隊,而從隊列中移除元素的操作稱為出隊。也可能允許其他操作,通常包括查看或前端操作,該操作返回下一個要出隊的元素的值而不將其出隊。

隊列的操作使其成為先進先出 (FIFO) 數(shù)據(jù)結(jié)構(gòu)。在 FIFO 數(shù)據(jù)結(jié)構(gòu)中,添加到隊列的第一個元素將是第一個被刪除的元素。這相當(dāng)于要求一旦添加了新元素,必須先刪除之前添加的所有元素,然后才能刪除新元素。隊列是線性數(shù)據(jù)結(jié)構(gòu)的一個例子,或者更抽象地說是一個順序集合。隊列在計算機程序中很常見,它們被實現(xiàn)為與訪問例程耦合的數(shù)據(jù)結(jié)構(gòu)、抽象數(shù)據(jù)結(jié)構(gòu)或在面向?qū)ο蟮恼Z言中作為類。常見的實現(xiàn)是循環(huán)緩沖區(qū)和鏈表。

隊列在計算機科學(xué)、傳輸和運籌學(xué)領(lǐng)域提供服務(wù),其中存儲和保存各種實體(如數(shù)據(jù)、對象、人員或事件)以供以后處理。在這些上下文中,隊列執(zhí)行緩沖區(qū)的功能。隊列的另一個用途是實現(xiàn)廣度優(yōu)先搜索。

大O表示

這個東西算是最出名的東西

那我們的堆是隊列中的優(yōu)先級隊列:

在計算機科學(xué)中,優(yōu)先級隊列是一種抽象數(shù)據(jù)類型,類似于常規(guī)隊列或堆棧數(shù)據(jù)結(jié)構(gòu),其中每個元素還具有與其關(guān)聯(lián)的“優(yōu)先級”。在優(yōu)先級隊列中,優(yōu)先級高的元素在優(yōu)先級低的元素之前被服務(wù)。在某些實現(xiàn)中,如果兩個元素具有相同的優(yōu)先級,則根據(jù)它們?nèi)腙牭捻樞驗樗鼈兲峁┓?wù),而在其他實現(xiàn)中,具有相同優(yōu)先級的元素的排序是不確定的。

雖然優(yōu)先級隊列通常用堆實現(xiàn),但它們在概念上與堆不同。優(yōu)先級隊列是一個類似于“列表”或“地圖”的概念;正如列表可以用鏈表或數(shù)組實現(xiàn)一樣,優(yōu)先隊列可以用堆或各種其他方法(例如無序數(shù)組)來實現(xiàn)。

上面這么多就夠了,這里只說一下。堆是一種稱為優(yōu)先級隊列的抽象數(shù)據(jù)類型的最高效率實現(xiàn),實際上,優(yōu)先級隊列通常稱為“堆”,無論它們?nèi)绾螌崿F(xiàn)。在堆中,最高(或最低)優(yōu)先級的元素總是存儲在根。但是,堆不是排序結(jié)構(gòu);它可以被認為是部分有序的。當(dāng)需要重復(fù)刪除具有最高(或最低)優(yōu)先級的對象時,堆是一種有用的數(shù)據(jù)結(jié)構(gòu)。

一個圖解決戰(zhàn)斗,看節(jié)點的數(shù)字大小

只實現(xiàn)了這三個

這個模塊提供了堆隊列算法的實現(xiàn),也稱為優(yōu)先隊列算法。

堆是一個二叉樹,它的每個父節(jié)點的值都只會小于或大于所有孩子節(jié)點。它使用了數(shù)組來實現(xiàn):從零開始計數(shù),對于所有的 k ,都有``heap[k] <= heap[2*k+1]`` 和 heap[k] <= heap[2*k+2] 。為了便于比較,不存在的元素被認為是無限大。堆最有趣的特性在于最小的元素總是在根結(jié)點:heap[0] 。

這個API與教材中堆算法的實現(xiàn)不太一樣,在于兩方面:

(a)我們使用了基于零開始的索引。這使得節(jié)點和其孩子節(jié)點之間的索引關(guān)系不太直觀,但是由于Python使用了從零開始的索引,所以這樣做更加合適。

(b)我們的 pop 方法返回了最小的元素,而不是最大的

(這在教材中叫做 “最小堆”;而“最大堆”在課本中更加常見,因為它更加適用于原地排序)。

基于這兩方面,把堆看作原生的Python list也沒什么奇怪的: heap[0] 表示最小的元素,同時 heap.sort() 維護了堆的不變性!

注意堆的實現(xiàn),是一個單獨的模塊

mpy中的堆操作,之后在使用的時候做說明

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多