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

歡迎訪問 生活随笔!

生活随笔

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

python

python的sys模块有什么用_python sys模块详解

發布時間:2025/3/15 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python的sys模块有什么用_python sys模块详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python sys 模塊詳解

1. 簡介

“sys”即“system”,“系統”之意。該模塊提供了一些接口,用于訪問 Python 解釋器自身使用和維護的變量,同時模塊中還提供了一部分函數,可以與解釋器進行比較深度的交互。

2. 常用功能

2.1 sys.argv

“argv”即“argument value”的簡寫,是一個列表對象,其中存儲的是在命令行調用 Python 腳本時提供的“命令行參數”。

這個列表中的第一個參數是被調用的腳本名稱,也就是說,調用 Python 解釋器的“命令”(python)本身并沒有被加入這個列表當中。這個地方要注意一下,因為這一點跟 C 程序的行為有所不同,C 程序讀取命令行參數是從頭開始的。

舉例來說,在當前目錄下新建一個 Python 文件sys_argv_example.py,其內容為:

import sys

print("The list of command line arguments:\n", sys.argv)

在命令行運行該腳本:

$ python sys_argv_example.py

The list of command line arguments:

['example.py']

加上幾個參數試試:

$ python sys_argv_example.py arg1 arg2 arg3

The list of command line arguments:

['example.py', 'arg1', 'arg2', 'arg3']

利用好這個屬性,可以極大增強 Python 腳本的交互性。

2.2 sys.platform

在《第26天: Python 標準庫之 os 模塊詳解》中,我們提到過“查看sys模塊中的sys.platform屬性可以得到關于運行平臺更詳細的信息”,這里我們就來試試:

>>> import sys

>>> sys.platform

'win32'

在 Linux 上:

>>> sys.platform

'linux'

比較一下os.name的結果,不難發現,sys.platform的信息更加準確。

2.3 sys.byteorder

“byteorder”即“字節序”,指的是在計算機內部存儲數據時,數據的低位字節存儲在存儲空間中的高位還是低位。

“小端存儲”時,數據的低位也存儲在存儲空間的低位地址中,此時sys.byteorder的值為“little”。如果不注意,在按地址順序打印內容的時候,可能會把小端存儲的內容打錯。當前大部分機器都是使用的小端存儲。

所以不出意外的話,你的機器上執行下述交互語句也應當跟我的結果一樣:

>>> sys.byteorder

'little'

而另外還存在一種存儲順序是“大端存儲”,即數據的高位字節存儲在存儲空間的低位地址上,此時sys.byteorder的值為“big”。

這種方式看起來好像很合理也很自然,因為我們一般在書面表示的時候都將低位地址寫在左邊,高位地址寫在右邊,大端存儲的順序就很符合人類的閱讀習慣。但實際上對機器而言,內存地址并沒有左右之分,所謂的“自然”其實并不存在。

抱歉我并沒有使用大端存儲的機器可以用作演示,因此只能說如果是大端存儲的機器上運行 Python,輸出結果應該像下面這樣,也就是說下面這個示例并非我得到的真實運行結果,僅供參考:

>>> sys.byteorder

'big'

2.4 sys.executable

該屬性是一個字符串,在正常情況下,其值是當前運行的 Python 解釋器對應的可執行程序所在的絕對路徑。

比如在 Windows 上使用 Anaconda 安裝的 Python,該屬性的值就是:

>>> sys.executable

'E:\\Anaconda\\Anaconda\\python.exe'

2.5 sys.modules

該屬性是一個字典,包含的是各種已加載的模塊的模塊名到模塊具體位置的映射。

通過手動修改這個字典,可以重新加載某些模塊;但要注意,切記不要大意刪除了一些基本的項,否則可能會導致 Python 整個兒無法運行。

關于其具體的值,由于內容過多,就不在此給出示例了,讀者可以自行查看。

2.6 sys.builtin_module_names

該屬性是一個字符串元組,其中的元素均為當前所使用的的 Python 解釋器內置的模塊名稱。

注意區別sys.modules和sys.builtin_module_names——前者的關鍵字(keys)列出的是導入的模塊名,而后者則是解釋器內置的模塊名。

其值示例如下:

>>> sys.builtin_module_names

('_abc', '_ast', '_bisect', '_blake2', '_codecs', '_codecs_cn', '_codecs_hk', '_codecs_iso2022', '_codecs_jp', '_codecs_kr', '_codecs_tw', '_collections', '_contextvars', '_csv', '_datetime', '_functools', '_heapq', '_imp', '_io', '_json', '_locale', '_lsprof', '_md5', '_multibytecodec', '_opcode', '_operator', '_pickle', '_random', '_sha1', '_sha256', '_sha3', '_sha512', '_signal', '_sre', '_stat', '_string', '_struct', '_symtable', '_thread', '_tracemalloc', '_warnings', '_weakref', '_winapi', 'array', 'atexit', 'audioop', 'binascii', 'builtins', 'cmath', 'errno', 'faulthandler', 'gc', 'itertools', 'marshal', 'math', 'mmap', 'msvcrt', 'nt', 'parser', 'sys', 'time', 'winreg', 'xxsubtype', 'zipimport', 'zlib')

2.7 sys.path

A list of strings that specifies the search path for modules. Initialized from the environment variable PYTHONPATH, plus an installation-dependent default.

該屬性是一個由字符串組成的列表,其中各個元素表示的是 Python 搜索模塊的路徑;在程序啟動期間被初始化。

其中第一個元素(也就是path[0])的值是最初調用 Python 解釋器的腳本所在的絕對路徑;如果是在交互式環境下查看sys.path的值,就會得到一個空字符串。

命令行運行腳本(腳本代碼見示例 sys_path_example.py):

$ python sys_path_example.py

The path[0] = D:\justdopython\sys_example

交互式環境查看屬性第一個元素:

>>> sys.path[0]

''

2.8 sys.exit

功能:執行到主程序末尾,解釋器自動退出,但是如果需要中途退出程序,可以調用sys.exit函數,帶有一個可選的整數參數返回給調用它的程序,表示你可以在主程序中捕獲對sys.exit的調用。(0是正常退出,其他為異常)

3. 進階功能

3.1 sys.stdin

即 Python 的標準輸入通道。通過改變這個屬性為其他的類文件(file-like)對象,可以實現輸入的重定向,也就是說可以用其他內容替換標準輸入的內容。

所謂“標準輸入”,實際上就是通過鍵盤輸入的字符。

在示例(sys_stdin_example.py)中,我們嘗試把這個屬性的值改為一個打開的文件對象hello_python.txt,其中包含如下的內容:

Hello Python!

Just do Python, go~

Go, Go, GO!

由于input()使用的就是標準輸入流,因此通過修改sys.stdin的值,我們使用老朋友input()函數,也可以實現對文件內容的讀取,程序運行效果如下:

$ python sys_stdin_example.py

Hello Python!

Just do Python, go~

Go, Go, GO!

3.2 sys.stdout

與上一個“標準輸入”類似,sys.stdout則是代表“標準輸出”的屬性。

通過將這個屬性的值修改為某個文件對象,可以將本來要打印到屏幕上的內容寫入文件。

比如運行示例程序sys_stdout_example.py,用來臨時生成日志也是十分方便的:

import sys

# 以附加模式打開文件,若不存在則新建

with open("count_log.txt", 'a', encoding='utf-8') as f:

sys.stdout = f

for i in range(10):

print("count = ", i)

3.3 sys.err

與前面兩個屬性類似,只不過該屬性標識的是標準錯誤,通常也是定向到屏幕的,可以粗糙地認為是一個輸出錯誤信息的特殊的標準輸出流。由于性質類似,因此不做演示。

此外,sys模塊中還存在幾個“私有”屬性:sys.__stdin__,sys.__stdout__,sys.__stderr__。這幾個屬性中保存的就是最初定向的“標準輸入”、“標準輸出”和“標準錯誤”流。在適當的時侯,我們可以借助這三個屬性將sys.stdin、sys.stdout和sys.err恢復為初始值。

3.4 sys.getrecursionlimit() 和 sys.setrecursionlimit()

sys.getrecursionlimit()和sys.setrecursionlimit()是成對的。前者可以獲取 Python 的最大遞歸數目,后者則可以設置最大遞歸數目。因為初學階段很少用到,因此只做了解。

3.5 sys.getrefcount()

在《第12天:Python 之引用》中我們其實已經用到過這個函數,其返回值是 Python 中某個對象被引用的次數。關于“引用”的知識可以回去看看這篇文章。

3.6 sys.getsizeof()

這個函數的作用與 C 語言中的sizeof運算符類似,返回的是作用對象所占用的字節數。

比如我們就可以看看一個整型對象1在內存中的大小:

>>> sys.getsizeof(1)

28

注意,在 Python 中,某類對象的大小并非一成不變的:

>>> sys.getsizeof(2**30-1)

28

>>> sys.getsizeof(2**30)

32

3.7 sys.int_info 和 sys.float_info

這兩個屬性分別給出了 Python 中兩個重要的數據類型的相關信息。

其中sys.int_info的值為:

>>> sys.int_info

sys.int_info(bits_per_digit=30, sizeof_digit=4)

在文檔中的解釋為:

屬性解釋

bits_per_digit

number of bits held in each digit. Python integers are stored internally in base 2**int_info.bits_per_digit

sizeof_digit

size in bytes of the C type used to represent a digit

指的是 Python 以 2 的sys.int_info.bits_per_digit次方為基來表示整數,也就是說它是“2 的sys.int_info.bits_per_digit次方進制”的數。這樣的數每一個為都用 C 類中的 4 個字節來存儲。

換句話說,每“進 1 位”(即整數值增加2 的sys.int_info.bits_per_digit次方),就需要多分配 4 個字節用以保存某個整數。

因此在sys.getsizeof()的示例中,我們可以看到2**30-1和2**30之間,雖然本身只差了 1,但是所占的字節后者卻比前者多了 4。

而sys.float_info的值則是:

>>> sys.float_info

sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)

其中各項具體的含義就不在這里繼續展開了,感興趣的同學可以參看文檔和《深入理解計算機系統》等講解組成原理的書。

4. 一個有趣的功能

接下來讓我們放松一下。

每次打開 Python 的交互式界面,我們都會看到一個提示符>>>。不知道你有沒有想過要把這個東西換成另外的什么呢?

反正我沒想過哈哈——至少在文檔中看到這兩個屬性之前,我確實沒有想過。哪兩個屬性呢?

就這倆貨:sys.ps1和sys.ps2

所謂“ps”,應當是“prompts”的簡寫,即“提示符”。

這兩個屬性中,sys.ps1代表的是一級提示符,也就是進入 Python 交互界面之后就會出現的那一個>>>;而第二個sys.ps2則是二級提示符,是在同一級內容沒有輸入完,換行之后新行行首的提示符...。當然,兩個屬性都是字符串。

好了,知道怎么回事兒就好辦了。

現在我們就來一個:

>>> sys.ps1 = "justdopython "

justdopython li = [1,2,3]

justdopython li[0]

1

justdopython

提示符已經被改變了,當然,有點長,不大美觀哈哈。

咱們換一下:

justdopython sys.ps1 = "ILoveYou: "

ILoveYou: print("你可真是個小機靈鬼兒!")

你可真是個小機靈鬼兒!

ILoveYou:

有點兒意思吧?

注意不要忘了在字符串最后加個空格,否則提示符就會和你輸入的內容混雜在一起了,會十分難看的喲~

總結

以上是生活随笔為你收集整理的python的sys模块有什么用_python sys模块详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美婷婷| 漂亮人妻被中出中文字幕 | 欧美视频精品在线 | 亚洲一区人妻 | 伊人影院视频 | 亚洲黄页 | 激情超碰在线 | 欧美性猛交xxxx乱大交蜜桃 | 国产又粗又猛又爽又黄的 | 久久国产精品久久久久久 | 欧美色图1| 欧美日韩少妇 | 色综合中文综合网 | 老司机在线观看视频 | 欧美巨乳在线 | 黄色片免费看 | 成品人视频ww入口 | 伊人春色av | 中文字幕 人妻熟女 | 实拍女处破www免费看 | 成人吃奶视频 | 亚洲一区高清 | 亚洲女同女同女同女同女同69 | www.超碰在线.com | av一二三| 免费毛片网| 精品福利在线观看 | 亚洲老女人 | 狠狠操人人干 | 国产婷婷一区二区三区久久 | 秋霞欧美一区二区三区视频免费 | 日韩和一区二区 | 特极毛片 | 影音先锋波多野结衣 | 成人免费视频毛片 | 日本成人不卡 | 99精品网站 | 看片免费黄在线观看入口 | 已满18岁免费观看电视连续剧 | 亚洲码欧美码一区二区三区 | 二区三区视频 | 啪啪在线观看 | 俺也去综合 | 福利视频午夜 | 亚洲精品久久久久久动漫器材一区 | 成人资源在线 | 先锋影音av在线资源 | av一区二区不卡 | 91无限观看| 91精品久久人妻一区二区夜夜夜 | 91视频一区| 希岛婚前侵犯中文字幕在线 | 国产第4页| 7777精品久久久久久 | 国产sm网站 | 国产成人自拍网 | 看片国产 | 射久久| 日韩精品久久久久久久的张开腿让 | 国产真实在线 | 国产女主播在线观看 | 夜夜成人 | 人人九九精 | 亚洲熟女乱综合一区二区 | 乱短篇艳辣500篇h文最新章节 | 国产美女视频网站 | 美妇湿透娇羞紧窄迎合 | 人人揉人人 | 91免费视频 | 97人妻人人澡人人爽人人精品 | 免费的理伦片在线播放 | 免费黄色av电影 | 久久夜色网 | 欧美图片一区二区 | 午夜成人影片 | 国产乱码一区二区三区 | 午夜三级视频 | 伊人青青草原 | 久久久久久久久久久久Av | 欧美性插视频 | 亚洲成人激情视频 | 天天干夜夜拍 | 欧美国产高清 | 免费欧美 | 亚洲第一福利网站 | 欧美午夜精品一区二区蜜桃 | 日本三级韩国三级美三级91 | 日韩在线精品强乱中文字幕 | 国产精品分类 | 欧美大胆视频 | 黑人超碰| 成人av资源在线 | 一级日韩一级欧美 | 久久99热精品 | 91丨porny在线 | 永久免费无码av网站在线观看 | 朝桐光一区二区三区 | 亚洲激情网址 | 国产尤物在线 |