楔子 不少編程語言中的"字符串"都是使用字符數組(或者稱字符序列)來表示,比如C語言和go語言就是這樣。 一個字節最多能表示256個字符,所以對於英文來說足夠了,因此一個英文字符占一個字節即可,然而對於那些非英文字符便力不從心了。因此為了表示這些非英文編碼,於是多字節編碼應運而生 ...
楔子 這一次我們分析一下Python中的字符串,首先Python中的字符串是一個變長對象,因為不同長度的字符串所占的內存空間是不一樣的 但同時字符串又是一個不可變對象,因為一旦創建就不可以再修改了。 而Python中的字符串是通過unicode來表示的,因此在底層對應的結構體是PyUnicodeObject。但是為什么需要unicode呢 首先計算機存儲的基本單位是字節,由 個比特位組成,由於英文 ...
2020-08-07 23:44 13 769 推薦指數:
楔子 不少編程語言中的"字符串"都是使用字符數組(或者稱字符序列)來表示,比如C語言和go語言就是這樣。 一個字節最多能表示256個字符,所以對於英文來說足夠了,因此一個英文字符占一個字節即可,然而對於那些非英文字符便力不從心了。因此為了表示這些非英文編碼,於是多字節編碼應運而生 ...
楔子 Python中的列表可以說使用的非常廣泛了,在初學列表的時候,老師會告訴你列表就是一個大倉庫,什么都可以存放。不過在最開始的幾個章節中,我們花了很大的筆墨介紹了Python中的對象,並明白了Python中變量的本質,我們知道列表中存放的元素其實都是泛型指針PyObject *,所以到現在 ...
楔子 Python的字典是一種映射型容器對象,保存了鍵(key)到值(value)的映射關系。通過字典,我們可以快速的實現值的查找,json這種數據結構也是借鑒了Python中的字典。而且字典在Python中是經過高度優化的,因為Python底層也在大量的使用字典這種數據結構。 那么這次 ...
楔子 這次我們來分析一下Python中的整數是如何實現的,我們知道Python中的整數是不會溢出的,換句話說,它可以計算無窮大的數。只要你的內存足夠,它就能計算,但是對於C來說顯然是不行的,可Python底層又是C實現的,那么它是怎么做到整數不會溢出的呢? 既然想知道答案,那么看一下 ...
楔子 從現在開始,我們就來分析Python中常見的內置對象、以及對應的實例對象,看看它們在底層是如何實現的。但說實話,我們在前面幾節中介紹對象的時候,已經說了不少了,不過從現在開始要進行更深入的分析。 除了對象本身,還要看對象支持的操作在底層是如何實現的。我們首先以浮點數為例,因為它是最簡單 ...
楔子 下面我們來聊一聊Python中的生成器,它是我們理解后面協程的基礎,生成器的話,估計大部分人在寫程序的時候都想不到用。但是一旦用好了,確實能給程序帶來性能上的提升,那么我們就來看一看吧。 生成器 基本用法 我們知道,一個函數如果它的內部出現了yield關鍵字,那么它就不再是普通的函數 ...
楔子 Python 現在如此流行,擁有眾多開源、高質量的第三方庫是一個重要原因,不過 Python 的簡單、靈巧、容易上手也是功不可沒的,而其背后的內置函數(類)則起到了很大的作用。舉個栗子: 我們看到一行代碼就搞定了,那么問題來了,這些內置函數(類)在底層是怎么實現的呢?下面我們就來 ...
楔子 在上一篇中我們說到了Python中的對象在底層的數據結構,我們知道Python底層通過PyObject和PyTypeObject完成了C++所提供的對象的多態特性。在Python中創建一個對象,會分配內存並進行初始化,然后Python會用一個PyObject *來保存和維護這個對象 ...