楔子 下面我們來聊一聊Python中的生成器,它是我們理解后面協程的基礎,生成器的話,估計大部分人在寫程序的時候都想不到用。但是一旦用好了,確實能給程序帶來性能上的提升,那么我們就來看一看吧。 生成器 基本用法 我們知道,一個函數如果它的內部出現了yield關鍵字,那么它就不再是普通的函數 ...
楔子 上一章中,我們通過 PyEval EvalFrameDefault看到了Python虛擬機的整體框架,那么這一章我們將深入到 PyEval EvalFrameDefault的各個細節當中,深入剖析Python的虛擬機,在本章中我們將剖析Python虛擬機是如何完成對一般表達式的執行的。這里的一般表達式包括最基本的對象創建語句 打印語句等等。至於if while等表達式,我們將其歸類於控制流語 ...
2020-08-18 17:12 0 518 推薦指數:
楔子 下面我們來聊一聊Python中的生成器,它是我們理解后面協程的基礎,生成器的話,估計大部分人在寫程序的時候都想不到用。但是一旦用好了,確實能給程序帶來性能上的提升,那么我們就來看一看吧。 生成器 基本用法 我們知道,一個函數如果它的內部出現了yield關鍵字,那么它就不再是普通的函數 ...
楔子 這一次我們就來剖析Python運行字節碼的原理,我們知道Python虛擬機是Python的核心,在源代碼被編譯成PyCodeObject對象時,就將由Python虛擬機接手整個工作。Python虛擬機會從PyCodeObject中讀取字節碼,並在當前的上下文中執行,直到所有的字節碼都被執行 ...
楔子 在上一篇中我們說到了Python中的對象在底層的數據結構,我們知道Python底層通過PyObject和PyTypeObject完成了C++所提供的對象的多態特性。在Python中創建一個對象,會分配內存並進行初始化,然后Python會用一個PyObject *來保存和維護這個對象 ...
楔子 不少編程語言中的"字符串"都是使用字符數組(或者稱字符序列)來表示,比如C語言和go語言就是這樣。 一個字節最多能表示256個字符,所以對於英文來說足夠了,因此一個英文字符占一個字節即可,然而對於那些非英文字符便力不從心了。因此為了表示這些非英文編碼,於是多字節編碼應運而生 ...
楔子 Python 和 C / C++ 混合編程已經屢見不鮮了,那為什么要將這兩種語言結合起來呢?或者說,這兩種語言混合起來能給為我們帶來什么好處呢?首先,Python 和 C / C++ 聯合,無非兩種情況。 1. C / C++ 為主導的項目中引入 Python; 2. ...
楔子 當我們想要執行一個py文件的時候,只需要python xxx.py即可,但是你有沒有想過這背后的流程是怎么樣的呢?從這里開始我們就開始進入到Python虛擬機的環節了,之前都是在介紹Python中的一些內置對象,不過虛擬機的執行流程、以及背后的原理卻更是值得我們關注的。 這里我們先來 ...
楔子 Python 可以和 C 無縫結合,通過 C 來為 Python 編寫擴展可以極大地提升 Python 的效率,但是使用 C 來編程顯然不是很方便,於是本人想到了 Go。對比 C 和 Go 會發現兩者非常相似,沒錯,Go 語言具有強烈的 C 語言背景,其設計者以及語言的設計目標都和 C ...
的,當然也從Python的角度介紹了Python中的協程。 這一次我們說一下Python模塊的加載機制 ...