日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

為什么要看 Python 源碼?它的結構長什么樣子?

來源: 責編: 時間:2024-05-08 09:20:42 222觀看
導讀楔子毫無疑問,Python 已經成為當下最主流的語言之一,如果你只是會用,那么很難和其他人拉開差距。但如果你知道 Python 解釋器的底層原理,比如:列表、字典、生成器等數據結構是怎么實現的;GIL 如何限制多線程只能同時使用一

楔子

毫無疑問,Python 已經成為當下最主流的語言之一,如果你只是會用,那么很難和其他人拉開差距。但如果你知道 Python 解釋器的底層原理,比如:rF628資訊網——每日最新資訊28at.com

  • 列表、字典、生成器等數據結構是怎么實現的;
  • GIL 如何限制多線程只能同時使用一個核;
  • 虛擬機是如何執行字節碼的;
  • Python 的垃圾回收又是怎么一回事;
  • ······

那么你在面試的時候一定能讓面試官眼前一亮,并且也能寫出更好、更優雅的代碼,這也是我們為什么要剖析 Python 解釋器源碼???Python 解釋器的源碼行數有五十多萬行,該怎么入手呢?不用擔心,本系列就來抽絲剝繭,帶你近距離觀察 Python 解釋器這座宏偉大廈。rF628資訊網——每日最新資訊28at.com

rF628資訊網——每日最新資訊28at.com

注:官方 Python 解釋器由 C 語言編寫,我們稱之為 CPython。想要讀懂它,需要有一定的 C 語言基礎,當然我也會給出詳細的注釋。rF628資訊網——每日最新資訊28at.com

rF628資訊網——每日最新資訊28at.com

本系列力求詳細、精致,在介紹源碼時會給出大量的注釋和清晰的圖表,并且我不僅僅會介紹源碼實現,還會穿插大量的 Python 普通知識。因為 Python 解釋器由 C 語言編寫,想要讀懂它,需要有一定的 C 語言基礎。而本系列則確保,不管你 C 語言的水平如何,讀了之后都能有所收獲。rF628資訊網——每日最新資訊28at.com

rF628資訊網——每日最新資訊28at.com

下載 CPython

rF628資訊網——每日最新資訊28at.com

rF628資訊網——每日最新資訊28at.com

接下來登錄 Python 官網 www.python.org 下載 CPython。rF628資訊網——每日最新資訊28at.com

圖片圖片rF628資訊網——每日最新資訊28at.com

目前 Python 的最新版本是 3.12.3,我們點擊它。當然隨著時間的推移,Python 也會進行更新。rF628資訊網——每日最新資訊28at.com

圖片圖片rF628資訊網——每日最新資訊28at.com

再點擊 Gzipped source tarball 即可下載指定版本的源碼。rF628資訊網——每日最新資訊28at.com

rF628資訊網——每日最新資訊28at.com

CPython 源碼結構

rF628資訊網——每日最新資訊28at.com

rF628資訊網——每日最新資訊28at.com

壓縮包下載下來之后解壓,即可得到整個 CPython 工程項目,我們看看它長什么樣子?rF628資訊網——每日最新資訊28at.com

圖片圖片rF628資訊網——每日最新資訊28at.com

解釋一下每個目錄的作用。rF628資訊網——每日最新資訊28at.com

Doc 目錄

存儲 Python 文檔的源文件(.rst),用于編譯之后生成官方文檔。rF628資訊網——每日最新資訊28at.com

Grammar 目錄

負責定義 Python 的語法規則。rF628資訊網——每日最新資訊28at.com

Include 目錄

包含 Python 所有公開的頭文件,這些文件定義了 Python 的 C API,在編寫擴展模塊和嵌入式開發時會用到。rF628資訊網——每日最新資訊28at.com

Lib 目錄

Python 的標準庫,對于那些不影響性能的功能會用 Python 編寫,然后放在 Lib 目錄下面。rF628資訊網——每日最新資訊28at.com

Modules 目錄

Python 的內置庫,這些庫都是用 C 編寫的,編譯之后會內嵌在解釋器里面。我們舉個例子:rF628資訊網——每日最新資訊28at.com

import random, _randomimport re, _sreimport io, _ioimport ast, _ast

以 random 為例,它是用來生成隨機數的,和性能密切相關。所以它的核心功能由 C 編寫,編譯之后內嵌在解釋器里,模塊名為 _random。只不過 Python 又封裝了一個 random,在內部會導入 _random,像 re 和 _sre、asyncio 和 _asyncio 都是類似的關系。rF628資訊網——每日最新資訊28at.com

Modules 目錄里面實現了大量和性能相關的模塊,比如 sys、time、gc 等等,我們后續再聊。rF628資訊網——每日最新資訊28at.com

Objects 目錄

包含 Python 內置數據結構的底層實現,像字典、列表、元組、函數等,底層實現都定義在 Objects 目錄中。rF628資訊網——每日最新資訊28at.com

Parser 目錄

負責 Python 編譯器的具體實現,雖然 Python 是解釋型語言,但也是要經過編譯的。編譯的結果為 PyCodeObject 對象,它里面包含了要執行的字節碼,編譯完之后會交給虛擬機執行。rF628資訊網——每日最新資訊28at.com

所以 Python 解釋器 = Python 編譯器 + Python 虛擬機。rF628資訊網——每日最新資訊28at.com

Python 目錄

Python 虛擬機的具體實現,字節碼的執行、執行環境的管理等都在里面。rF628資訊網——每日最新資訊28at.com

Mac 目錄

用于 Mac OS X 平臺的特定工具和腳本。rF628資訊網——每日最新資訊28at.com

Misc 目錄

包含各種雜項文件,如配置腳本、工具等。rF628資訊網——每日最新資訊28at.com

PC 目錄

專為 Windows 平臺編寫的配置文件和特定擴展。rF628資訊網——每日最新資訊28at.com

PCbuild 目錄

用于在 Windows 上編譯 Python 的項目文件。rF628資訊網——每日最新資訊28at.com

Programs 目錄

包含 Python 其它可執行文件(如 IDLE)的源代碼。rF628資訊網——每日最新資訊28at.com

Tools 目錄

包含用 Python 編寫的各種腳本和工具,幫助開發和維護 Python。rF628資訊網——每日最新資訊28at.com

以上就是 CPython 的源碼結構,對它有一個基本的認識有助于我們后續的源碼學習。rF628資訊網——每日最新資訊28at.com

rF628資訊網——每日最新資訊28at.com

解釋器、編譯器、虛擬機

rF628資訊網——每日最新資訊28at.com

rF628資訊網——每日最新資訊28at.com

介紹源碼結構時我們說 Python 解釋器 = Python 編譯器 + Python 虛擬機,那當解釋器執行 py 文件時都經歷了哪些過程呢?rF628資訊網——每日最新資訊28at.com

圖片圖片rF628資訊網——每日最新資訊28at.com

Read File、Scanner、Parser、Compiler 都是由 Python 編譯器負責的,Code Eval 則由 Python 虛擬機負責。rF628資訊網——每日最新資訊28at.com

因此 Python 雖然是解釋型語言,但也有編譯的過程。源代碼會被編譯器編譯成 PyCodeObject 對象,然后再交給虛擬機來執行。而之所以要存在編譯,是為了讓虛擬機能更快速地執行,比如在編譯階段常量都會提前分配好,而且還可以盡早檢測出語法上的錯誤。rF628資訊網——每日最新資訊28at.com

而 Python 編譯器和 Python 虛擬機組合起來,便是 Python 解釋器。rF628資訊網——每日最新資訊28at.com

圖片圖片rF628資訊網——每日最新資訊28at.com

如果你了解 Java,那么應該知道 Java 也有編譯器和虛擬機。只不過 Java 的編譯器和虛擬機是分開的,而 Python 則是整合在一起的。rF628資訊網——每日最新資訊28at.com

不過在后續介紹 Python 源碼的時候,我們暫不涉及 Python 編譯器的部分,也就是 Parser 目錄里面的代碼不做分析,因為涉及到編譯原理。而且編譯這一過程也不是 Python 語言獨有的,任何一門編程語言、當然還有 SQL 都會涉及到編譯。所以探究 Python 代碼的編譯過程沒太大意義,我們的重點是 Python 代碼的編譯結果,以及虛擬機是如何執行的?rF628資訊網——每日最新資訊28at.com

當然如果大家對編譯過程感興趣,我們后面也會介紹一下這方面的內容。舉個例子,我們來替換掉 Python 的幾個關鍵字。rF628資訊網——每日最新資訊28at.com

圖片圖片rF628資訊網——每日最新資訊28at.com

Python 源碼的分詞,語法解析等均由 Parser 目錄負責。rF628資訊網——每日最新資訊28at.com

圖片圖片rF628資訊網——每日最新資訊28at.com

比如 tokenizer.c 負責分詞,parser.c 負責語法解析,感興趣可以看一下,但不建議花太多時間。因為這個過程對深入 Python 沒多大用,并且 parser.c 的代碼行數多達 4w 多行,讀起來也很痛苦。rF628資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-87264-0.html為什么要看 Python 源碼?它的結構長什么樣子?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 5分鐘帶你了解【前端裝飾器】,“高大上”的“基礎知識”

下一篇: 導致 CPU 飆升到 100% 的九大原因

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
欧美理论在线播放| 久久久久高清| 亚洲免费观看高清完整版在线观看| 国产精品人人爽人人做我的可爱| 亚洲嫩草精品久久| 欧美一级在线视频| 男男成人高潮片免费网站| 久久久久久久999| 久久女同互慰一区二区三区| 久久久久久综合网天天| 久久午夜色播影院免费高清| 久久久蜜桃一区二区人| 久久在线91| 久久福利视频导航| 亚洲欧美在线x视频| 亚洲综合色网站| 久久国产加勒比精品无码| 久久婷婷国产麻豆91天堂| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美高清在线| 国产精品少妇自拍| 国产精品永久免费在线| 欧美日韩综合久久| 国产精品入口麻豆原神| 亚洲人成网站精品片在线观看| 一区二区电影免费观看| 欧美综合二区| 欧美成人免费大片| 国产乱码精品一区二区三区不卡| 狠狠综合久久| 99国产精品视频免费观看一公开| 亚洲精品乱码视频| 亚洲图片欧美一区| 欧美一区二区三区免费视| 欧美视频在线观看 亚洲欧| 国产视频欧美视频| 亚洲激情av在线| 久久久精品动漫| 欧美日韩亚洲一区二区三区四区| 国产精品毛片va一区二区三区| 黄色日韩在线| 亚洲视频第一页| 欧美日韩在线播放三区四区| 91久久国产自产拍夜夜嗨| 亚洲欧美日韩综合一区| 欧美日韩国产不卡| 亚洲大片av| 欧美怡红院视频| 欧美日韩专区| 亚洲国产婷婷香蕉久久久久久99 | 黄色一区三区| 性一交一乱一区二区洋洋av| 欧美日韩一区二区视频在线| 最新国产拍偷乱拍精品| 久久婷婷麻豆| 国产午夜精品久久久| 亚洲视频在线一区| 国产精品福利片| 亚洲一区二区三| 国产日韩欧美视频在线| 亚洲欧美日韩成人高清在线一区| 欧美色道久久88综合亚洲精品| 日韩网站在线看片你懂的| 久久久777| 亚洲精品日日夜夜| 久久久精品999| 韩国在线一区| 欧美一区二区三区电影在线观看| 国产精品家教| 一区二区三区精品国产| 国产欧美精品一区| 欧美1区2区| 日韩一级免费观看| 国产精品v日韩精品| 午夜伦欧美伦电影理论片| 国产一区二区日韩精品| 欧美一区二区三区免费视| 国产精品亚洲一区| 欧美激情一区在线| 亚洲综合日本| 国产亚洲一区二区三区在线观看| 久久综合网色—综合色88| 亚洲二区三区四区| 欧美日韩高清在线播放| 久久久久久网站| 亚洲欧美卡通另类91av| 亚洲福利在线看| 欧美日韩在线看| 先锋影音国产精品| 国内久久视频| 欧美视频中文字幕| 欧美激情亚洲激情| 久久国产精品99国产精| 亚洲精品中文字幕在线| 国产精品福利在线观看| 午夜在线视频观看日韩17c| 国产色爱av资源综合区| 国产精品―色哟哟| 欧美日韩国产美| 久久久久久69| 亚洲视频在线播放| 亚洲福利国产精品| 国产亚洲精品久久久久婷婷瑜伽| 国产精品久久一级| 欧美精品久久天天躁| 欧美一级在线视频| 一区二区三区回区在观看免费视频| 国产一区二区三区自拍| 欧美人与性动交cc0o| 久久综合久久综合久久综合| 欧美一区二区精品在线| 亚洲欧洲精品成人久久奇米网| 国产视频一区二区在线观看| 欧美午夜www高清视频| 久久精品系列| 亚洲午夜成aⅴ人片| 亚洲看片一区| 亚洲深夜福利| 亚洲午夜免费视频| 国产精品99久久久久久久vr| 亚洲精品日韩综合观看成人91| 国产麻豆午夜三级精品| 国产精品蜜臀在线观看| 国产精品入口| 国产精品午夜春色av| 国产精品久久久久一区二区三区共| 国产精品yjizz| 国产精品久久国产三级国电话系列 | 亚洲电影第三页| 国精品一区二区三区| 国产欧美va欧美va香蕉在| 国产精品久久国产精品99gif| 欧美日韩一区二区三区高清| 国产精品日韩欧美| 欧美日韩在线免费观看| 免费在线国产精品| 欧美视频1区| 狠久久av成人天堂| 99国产精品私拍| 久久国产精品久久w女人spa| 欧美成人性网| 国产一区二区av| 一卡二卡3卡四卡高清精品视频| 欧美一级艳片视频免费观看| 亚洲第一在线综合在线| 亚洲综合精品| 欧美激情精品久久久久久蜜臀| 国产精品任我爽爆在线播放| 亚洲国产高潮在线观看| 欧美一二区视频| 欧美无砖砖区免费| 亚洲国产一区二区三区在线播| 午夜精品久久久久久久| 欧美成人精品一区二区三区| 国产欧美成人| 亚洲一级在线观看| 欧美日韩国产区一| 亚洲国产美女精品久久久久∴| 午夜免费日韩视频| 欧美调教vk| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 国一区二区在线观看| 性高湖久久久久久久久| 国产精品久久久久久久久免费 | 欧美日韩激情网| 一区二区久久久久| 国产视频不卡| 欧美成人69av| 亚洲精品网站在线播放gif| 欧美日韩国产探花| 亚洲女同性videos| 亚洲第一区色| 欧美午夜在线一二页| 久久激情综合网| 日韩一级黄色av| 国产有码一区二区| 欧美日韩在线观看一区二区三区| 亚洲一区二区三区精品动漫| 久久美女性网| 激情欧美一区二区三区| 美女999久久久精品视频| 亚洲欧洲三级电影| 国产精品久久7| 久久一区二区视频| 亚洲人成人一区二区三区| 欧美精品啪啪| 亚洲在线网站| 激情综合色综合久久| 欧美高清视频免费观看| 亚洲一区二区黄| 在线观看欧美激情| 欧美午夜电影在线| 久久免费少妇高潮久久精品99| 亚洲精品色图| 国产视频一区在线观看| 欧美日本国产在线| 久久久久久一区二区三区| 一区二区三区回区在观看免费视频| 国产热re99久久6国产精品| 欧美激情久久久久久| 欧美一级电影久久| 亚洲视频在线观看视频| 在线免费观看一区二区三区| 国产精品久久久久久亚洲调教|