Python 原始碼探索(八)

2021-10-09 21:58:37 字數 2417 閱讀 9565

前言

無下劃線的 bz2

hello world

轉眼間,2020 的國慶就到了,預祝大家都節日快樂,心想事成。今年的時間,有急有緩,對我來說,彷彿剛過完春節,就已經到了國慶,在這個舉國歡慶的日子裡,城鄉間,湖河旁,卻沒有了曾經的燈紅酒綠,後悔的事誰都有,後悔的藥卻沒有人吃過,也許最好的後悔藥就是遺忘。

bz2上次用 pycharm 看了 _bz2 的 .py 檔案,這次接著看 bz2 的 .py 檔案。

經過縮略之後,整個檔案看起來非常簡潔漂亮,文件注釋告訴了我們這是與 libbzip2 壓縮庫的介面,該模組提供檔案介面,用於增量(解壓縮)壓縮類,並具有單次(解壓縮)壓縮功能。

細心的朋友可能會發現,該檔案下,定義類和函式行前面,有乙個 *(星號),而且單擊該星號,會跳轉到對應的 .pyi 檔案相應的位置,而 .pyi 檔案是一存根檔案,文件注釋下,是兩個首尾雙下劃線的變數,也就是說這不是普通的變數,是 python 裡特殊方法專用的,關於下劃線,這位 朋友 寫得很好,可以去看看,這裡不多了解了,這兩個私有的變數指向了乙個列表和一行字串,列表元素均為字串型別,可以把這兩個變數看做是一堆會用到的字串,等待呼叫。縮略的匯入模組如下:

from builtins import

open

as _builtin_open

import io

import os

import warnings

import _compression

from threading import rlock

from _bz2 import bz2compressor, bz2decompressor

有熟悉的,也有陌生的,這裡簡單了解下就好,builtins,python 的內建物件,此模組可直接訪問 python 的所有【內建】識別符號; 例如,builtins.open 是內建函式 open() 的全名,大多數應用程式通常不顯式訪問此模組,但在提供與內建值同名的物件的模組中,該模組很有用,例如,在要實現包裝內建 open() 的 open() 函式的模組中,可以直接使用此模組。io,處理各種型別 i/o 的主要工具。os,提供了多數作業系統的功能介面函式。warnings,可以匯入該模組,用於去除警告資訊。_compression,這可能就是 bz2 壓縮演算法的具體實現細節模組了,下圖:

僅匯入了 io 模組,文件注釋說了這是 gzip,lzma 和 bz2 模組使用的內部類,秉著精益求精的態度,現在就去理解它的實現,該內部類定義了乙個 buffer_size 物件,用以壓縮資料讀取塊大小;乙個 basestream 類,用以實現模型檢查功能;乙個 decompressreader 類,用以使解壓縮器 api 適應 rawiobase 閱讀器 api。單擊 buffer_size 物件前面的星號,轉到該內部類的 .pyi 裡面,如下:

首行匯入了 typing 和 io,如下:

from typing import any

import io

typing 的 any,用於型別檢查,更多關於 typing,可以去看看這位 朋友 的文章。其中,buffer_size 物件便用到了 any,單擊【buffer_size: any】前面的星號便可回到 _compression 內部類,有朋友可能想有些問星號後面那些有著上下箭頭的像 *** 一樣的圖示是幹嘛的,那這裡就來單擊看看吧,就單擊 .pyi 下的 basestream 類的吧,結果如下:

這是乙個可選擇的選單,隨便點乙個就會轉到對應的模組內,比如選擇第乙個然後單擊,結果如下:

如果到這裡還不知道這個特殊的 *** 一樣的圖示有什麼用,那接著看箭頭向上的一種,這裡單擊 .pyi 下的 decompressreader 類下的 readable 方法,結果如下:

這裡可以知道了,這個圖示是在告訴我們,該類或函式的超類或是子類在**,是誰;箭頭向下的是該類或函式以下有子類;向上的是以上有超類。

好吧,這次就到這裡,下次繼續理解 _compression 內部類這個壓縮演算法的實現。

感謝csdn,感謝 c 友們的支援

react原始碼探索

react核心部分為 1 虛擬dom物件 reactdom.render args,element 這個方法第乙個引數接收三種形式的內容的 第一種 字串 第二種 由createclass建立的物件,使用createelement處理 第三種 直接有createelement建立的物件 這些還未呼叫r...

MyBatis原始碼探索

每個基於 mybatis 的應用都是以乙個 sqlsessionfactory 的例項為中心的。sqlsessionfactory 的例項可以通過 sqlsessionfactorybuilder 獲得。而 sqlsessionfactorybuilder 則可以從 xml mybatis conf...

Byte的原始碼探索

非可變類 final class 實現對比介面 comparable 繼承於數字類 numberbyte min value 最小值 byte max value 最大值 classtype 類型別 byte value 初始值 int size bit位數 int bytes 位元組數static...