日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python源码剖析新版_Python 源码剖析之基础知识

發布時間:2023/12/10 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python源码剖析新版_Python 源码剖析之基础知识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python 源碼剖析之基礎知識

為了和《Python 源碼剖析》一書保持一致,本系列筆記分析的源碼是 cpython-2.5.6 。

Python 總體架構

Python 的總體架構可以分成三個主要的部分:

大量的核心模塊、庫和用戶自定義模塊

Python 作為腳本語言的核心即解釋器(詞法分析產生 token,語法分析建立抽象語法樹,編譯成字節碼,虛擬機執行字節碼)

Python 運行時環境(對象和類型體系,內存分配器,運行時狀態信息)

Python 總體架構

Python 源代碼組織結構

為了和參考書籍保持一致,便于學習,這里仍舊采用 cpython-2.5.6 進行研究學習。

源代碼目錄如下:

├── Demo

├── Doc

├── Grammar

├── Include

├── LICENSE

├── Lib

├── Mac

├── Makefile.pre.in

├── Misc

├── Modules

├── Objects

├── PC

├── PCbuild

├── PCbuild8

├── Parser

├── Python

├── README

├── RISCOS

├── Tools

├── configure

├── configure.in

├── install-sh

├── pyconfig.h.in

└── setup.py

其中:

Include: Python 提供的所有 C 語言頭文件,當自己想用 C 或 C++ 來編寫自定義模塊擴展 Python 的時候,就需要用到這些頭文件。可以看到里面有我們之后要研究的各種對象的聲明。

? cpython-2.5 tree -L 1 Include

Include

├── Python-ast.h

├── Python.h

├── abstract.h

├── asdl.h

├── ast.h

├── bitset.h

├── boolobject.h

├── bufferobject.h

├── cStringIO.h

├── cellobject.h

├── ceval.h

├── classobject.h

├── cobject.h

├── code.h

├── codecs.h

├── compile.h

├── complexobject.h

├── datetime.h

├── descrobject.h

├── dictobject.h

├── enumobject.h

├── errcode.h

├── eval.h

├── fileobject.h

├── floatobject.h

├── frameobject.h

├── funcobject.h

├── genobject.h

├── graminit.h

├── grammar.h

├── import.h

├── intobject.h

├── intrcheck.h

├── iterobject.h

├── listobject.h

├── longintrepr.h

├── longobject.h

├── marshal.h

├── metagrammar.h

├── methodobject.h

├── modsupport.h

├── moduleobject.h

├── node.h

├── object.h

├── objimpl.h

......

├── pythread.h

├── rangeobject.h

├── setobject.h

├── sliceobject.h

├── stringobject.h

├── structmember.h

├── structseq.h

├── symtable.h

├── sysmodule.h

├── timefuncs.h

├── token.h

├── traceback.h

├── tupleobject.h

├── ucnhash.h

├── unicodeobject.h

└── weakrefobject.h

0 directories, 80 files

Lib: Python 自帶的所有標準庫,都是用 Python 語言編寫的。可以看到有我們經常使用的類似于 base64,os 這樣的 Python 標準庫

? cpython-2.5 tree -L 1 Lib

Lib

├── BaseHTTPServer.py

├── Bastion.py

├── CGIHTTPServer.py

...

├── base64.py

...

├── hashlib.py

├── heapq.py

...

├── md5.py

...

├── optparse.py

├── os.py

├── os2emxpath.py

├── pdb.doc

├── pdb.py

├── pickle.py

├── pickletools.py

...

├── random.py

├── re.py

├── repr.py

...

├── socket.py

├── sqlite3

...

├── subprocess.py

...

├── xml

├── xmllib.py

├── xmlrpclib.py

└── zipfile.py

39 directories, 193 files

Modules: 該目錄也是包含了 Python 自帶的的模塊,和 Lib 目錄不同的是,Modules 下的模塊都是用 C 語言編寫的,是那些對速度要求非常嚴格的模塊。比如時間相關的 datetime,timeing 等模塊

? cpython-2.5 tree -L 1 Modules

Modules

├── Setup.config.in

├── Setup.dist

...

├── _randommodule.c

├── _sqlite

...

├── cPickle.c

├── cStringIO.c

...

├── datetimemodule.c

...

├── getpath.c

...

├── md5.c

├── md5.h

├── md5module.c

...

├── python.c

├── readline.c

├── resource.c

...

├── timemodule.c

├── timing.h

├── timingmodule.c

...

├── zipimport.c

├── zlib

└── zlibmodule.c

5 directories, 121 files

Parser: 該目錄包含了 Python 解釋器中的 Scanner 和 Parser 部分(詞法分析和語法分析),還包含類似于 YACC 這樣的能根據 Python 語言的語法自動生成 Python 語言的文法和詞法分析器的工具。

? cpython-2.5 tree -L 1 Parser

Parser

├── Python.asdl

├── acceler.c

├── asdl.py

├── asdl_c.py

├── bitset.c

├── firstsets.c

├── grammar.c

├── grammar.mak

├── grammar1.c

├── intrcheck.c

├── listnode.c

├── metagrammar.c

├── myreadline.c

├── node.c

├── parser.c

├── parser.h

├── parsetok.c

├── pgen.c

├── pgenmain.c

├── printgrammar.c

├── spark.py

├── tokenizer.c

├── tokenizer.h

└── tokenizer_pgen.c

0 directories, 24 files

Objects: 和 Include 目錄對應,這個目錄包含了所有 Python 的內建對象 C 語言實現代碼,還包含了 Python 在運行時需要的所有的內部使用對象的實現。

? cpython-2.5 tree -L 1 Objects

Objects

├── abstract.c

├── boolobject.c

├── bufferobject.c

├── cellobject.c

├── classobject.c

├── cobject.c

├── codeobject.c

├── complexobject.c

├── descrobject.c

├── dictnotes.txt

├── dictobject.c

├── enumobject.c

├── exceptions.c

├── fileobject.c

├── floatobject.c

├── frameobject.c

├── funcobject.c

├── genobject.c

├── intobject.c

├── iterobject.c

├── listobject.c

├── listsort.txt

├── longobject.c

├── methodobject.c

├── moduleobject.c

├── object.c

├── obmalloc.c

├── rangeobject.c

├── setobject.c

├── sliceobject.c

├── stringlib

├── stringobject.c

├── structseq.c

├── tupleobject.c

├── typeobject.c

├── unicodectype.c

├── unicodeobject.c

├── unicodetype_db.h

└── weakrefobject.c

1 directory, 38 files

Python: 該目錄包含了 Python 解釋器中的 Compiler 和執行引擎部分,是 Python 運行的核心所在。

? cpython-2.5 tree -L 1 Python

Python

├── Python-ast.c

├── asdl.c

├── ast.c

├── atof.c

├── bltinmodule.c

├── ceval.c

├── codecs.c

├── compile.c

├── dup2.c

├── dynload_aix.c

├── dynload_atheos.c

├── dynload_beos.c

├── dynload_dl.c

├── dynload_hpux.c

├── dynload_next.c

├── dynload_os2.c

├── dynload_shlib.c

├── dynload_stub.c

├── dynload_win.c

├── errors.c

├── fmod.c

├── frozen.c

├── frozenmain.c

├── future.c

├── getargs.c

├── getcompiler.c

├── getcopyright.c

├── getcwd.c

├── getmtime.c

├── getopt.c

├── getplatform.c

├── getversion.c

├── graminit.c

├── hypot.c

├── import.c

├── importdl.c

├── importdl.h

├── mactoolboxglue.c

├── marshal.c

├── memmove.c

├── modsupport.c

├── mysnprintf.c

├── mystrtoul.c

├── pyarena.c

├── pyfpe.c

├── pystate.c

├── pystrtod.c

├── pythonrun.c

├── sigcheck.c

├── strdup.c

├── strerror.c

├── strtod.c

├── structmember.c

├── symtable.c

├── sysmodule.c

├── thread.c

├── thread_atheos.h

├── thread_beos.h

├── thread_cthread.h

├── thread_foobar.h

├── thread_lwp.h

├── thread_nt.h

├── thread_os2.h

├── thread_pth.h

├── thread_pthread.h

├── thread_sgi.h

├── thread_solaris.h

├── thread_wince.h

└── traceback.c

0 directories, 69 files

修改 Python 源代碼并編譯安裝

為了觀察 Python 的執行過程,我們經常需要修改 Python 源代碼,改變一些執行邏輯,添加一些日志輸出,然后重新編譯安裝 Python 并運行觀察驗證結果。編譯安裝可以按照以下步驟:

./configure --prefix=$(pwd)

make && make install

注意,我在 Mac OS X Yosemite 10.10.3 上編譯失敗了,日志顯示:

? cpython-2.5 make

gcc -c -fno-strict-aliasing -Wno-long-double -no-cpp-precomp -mno-fused-madd -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I. -IInclude -I./Include -DPy_BUILD_CORE -o Modules/python.o ./Modules/python.c

clang: error: unknown argument: '-mno-fused-madd'

make: *** [Modules/python.o] Error 1

gcc 識別不了相應的一個 編譯參數,搜索了一下,原因應該是 XCode 的版本和當時的 2.5.6 不兼容,所以果斷選擇了在 Ubuntu 14.04 上編譯安裝 Python,很快就通過了。

總結

以上是生活随笔為你收集整理的python源码剖析新版_Python 源码剖析之基础知识的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 初高中福利视频网站 | www.69视频| 久久人人添人人爽添人人片 | 国产高清在线精品 | 亚洲巨乳在线 | 日本精品中文字幕 | 天堂欧美城网站网址 | 国产99久久九九精品无码 | 国产精品免费av一区二区 | 露脸啪啪清纯大学生美女 | 欧美国产日韩在线观看 | 日本国产在线 | 免费毛毛片 | 国产精品300页 | 男女污视频 | 日韩精品中文字 | 黄色av网站在线 | www国产免费 | 黄色一级免费观看 | 欧美夜夜 | 国产日韩二区 | 九一精品一区 | 26uuu国产精品视频 | 伊人精品在线观看 | 久操视频免费看 | 伊人久久精品视频 | 久久久久久久国产视频 | 欧美一区二区区 | 91原创国产 | 午夜精品福利在线观看 | 青青青青青青青青草 | 亚洲va在线观看 | jizz在线观看视频 | 黄色在线观看www | 亚洲天堂av一区二区 | 日韩porn| 亚洲图片自拍偷拍区 | 三叶草欧洲码在线 | 丰满女邻居的色诱4hd | 日韩av地址 | 色二区 | 都市激情 亚洲 | 亚洲乱码日产精品bd在线观看 | 黄色理伦片| 日本老熟妇毛茸茸 | 不卡久久 | 午夜一区二区三区 | 性欧美一级 | 国产伦精品一区二区三区免费迷 | 秋霞99 | 涩涩视频网址 | av先锋在线 | 亚洲高清福利 | 综合网色 | 好吊操这里有精品 | www视频在线观看免费 | 91色在线播放 | 精品国产乱码久久久久久浪潮 | 亚洲激情欧美色图 | 玖玖爱精品 | 亚洲精品日韩av | 成人精品一区二区 | 伊人手机在线视频 | 99精品福利视频 | 一本大道视频 | 99色 | 亚洲精品乱码久久久久久自慰 | 国产精品无码久久av | 久久精品无码专区免费 | 朝桐光av在线一区二区三区 | 99精彩视频 | 成人免费高清视频 | 三级国产网站 | 国产精品久久久久一区二区三区 | 国产美女自拍 | 字幕网在线观看 | 国产美女精品久久 | 国产精品午夜电影 | 黄色三级小视频 | 一区二区三区视频免费视 | 天天成人 | 综合九九 | 99热久久这里只有精品 | 毛片一级在线观看 | 亚洲爱爱片 | 日韩黄色一级 | 欧美aa大片 | 少妇高潮毛片色欲ava片 | 高跟肉丝丝袜呻吟啪啪网站av | 国产亚洲AV无码成人网站在线 | 免费看一级黄色片 | 一区二区在线免费观看 | 99精品综合 | 另类捆绑调教少妇 | 17c在线| 日韩在线观看 | 99热这里只有精品首页 | 日韩精品一区二区三区电影 | 无套在线观看 |