b2b網(wǎng)站介紹友情鏈接是什么意思
模塊
內(nèi)置模塊
sys模塊
概述:Python 的 sys 模塊提供訪問解釋器使用或維護(hù)的變量,和與解釋器進(jìn)行交互的函數(shù)。通俗來講,sys 模塊為程序與 Python 解釋器的交互,提供了一系列的函數(shù)和變量,用于操控 Python 運行時的環(huán)境
sys.argv?
sys.argv :實現(xiàn)從程序外部向程序傳遞參數(shù)
sys.argv 變量是一個包含了命令行參數(shù)的字符串列表,利用命令行向程序傳遞參數(shù)。其中,腳本的名稱總是 sys.argv 列表的第一個參數(shù)。
import sys
print(sys.argv[0]) #sys.argv[0]表示代碼本身的文件路徑
print("命令行參數(shù)如下:")
for i in sys.argv:print(i)命令行輸入?yún)?shù)如下:
D:\st13\python\1.20\python lx.py Welcome to Xian運行結(jié)果:
lx.py #sys.argv[0]
命令行參數(shù)如下:
lx.py
Welcome
to
Xian
sys.copyright
sys.copyright? ? ? ? ? ?包含 Python 解釋器有關(guān)的版權(quán)信息的字符串
>>> import sys
>>> sys.copyright
'Copyright (c) 2001-2022 Python Software Foundation.\nAll Rights Reserved
.\n\nCopyright (c) 2000 BeOpen.com.\nAll Rights Reserved
.\n\nCopyright (c) 1995-2001 Corporation for National Research Initiatives
.\nAll Rights Reserved.\n\nCopyright (c) 1991-1995 Stichting
Mathematisch Centrum, Amsterdam.\nAll Rights Reserved.'
>>>
sys.exit([arg])??
sys.exit([arg])? :?一般情況下執(zhí)行到主程序末尾,解釋器自動退出,但是如果需要中途退出程序,可以調(diào)用 sys.exit() 函數(shù),帶有一個可選的整數(shù)參數(shù)返回給調(diào)用它的程序,表示你可以在主程序中捕獲對 sys.exit() 的調(diào)用。(0是正常退出,其他為異常)當(dāng)然也可以用字符串參數(shù),表示錯誤不成功的報錯信息。
下面的例子,首先打印 'Hello',執(zhí)行完 sys.exit(1),執(zhí)行 except 語句,將 '中途退出' 作為參數(shù)傳遞給函數(shù) exitfunc(),然后將 '中途退出' 打印出來,程序正常退出,不執(zhí)行后面的 print("Welcome") 語句
import sys
def exitfunc(value):print(value)sys.exit(0)
print("Hello")
try:sys.exit(1)
except SystemExit as value:exitfunc('中途退出')
print("Welcome")運行結(jié)果:
Hello
中途退出
或者在終端上退出python解釋器
>>> sys.exit()C:\Users\朱俊杰>
sys.getrecursionlimit()
- 返回當(dāng)前遞歸的限制也就是Python解釋器堆棧最大深度的值。
- 該限制可防止無限遞歸導(dǎo)致C堆棧溢出和Python崩潰。它可以通過setrecursionlimit()設(shè)置。
>>> sys.getrecursionlimit()
1000
sys.setrecursionlimit(<limit>)
設(shè)置Python解釋器的堆棧最大深度為<limit>。
該限制可防止無限遞歸導(dǎo)致C堆棧溢出和Python崩潰。
最高可能的限制取決于平臺
>>> sys.setrecursionlimit(2000)
>>> sys.getrecursionlimit()
2000
sys.getrefcount(<object>)
- 獲取引用數(shù)量 引用計數(shù)的精確分析可能受到一些內(nèi)部因素的影響,通常情況下你只需要關(guān)注相對引用的變化,而不必過于關(guān)注具體的引用次數(shù)。
- 返回<object>的引用次數(shù)。
- 引用次數(shù)會比期望值值多一個,因為它包含getrefcount()參數(shù)的臨時引用。
>>> class Test():
>>> pass
>>> t = Test()
>>> sys.getrefcount(t) # t本身是Test,所以被引用了一次。
2
引出:
小整數(shù)對象池:python為了讓程序簡單化,運行更加迅速,在python解釋器加載的那一刻將一些常用的數(shù)字創(chuàng)建好(范圍:[-5,256])
- 范圍內(nèi)的數(shù)字稱為小整數(shù)
- 這個范圍稱為小整數(shù)對象池
>>> a = [1,2,3,4]
>>> b = [1,2,3,4]
>>> id(a)
2312403015936
>>> id(b)
2312403230080 #盡管內(nèi)容相同,但不同變量地址不同
>>> c = 5
>>> d = 5
>>> id(c)
2312401846640
>>> id(d)
2312401846640 #證明5是小整數(shù)對象池里的(常用)
>>> e = -10
>>> f = -10
>>> id(e)
2312402870448
>>> id(f)
2312402870704 #證明-10不是小整數(shù)對象池里的(不常用)
>>>
字符串駐留機(jī)制(Intern機(jī)制):創(chuàng)建普通字符串(不含空格等特殊字符)時打開,不重復(fù)創(chuàng)建字符串地址
>>> a = "love"
>>> b = "love" #普通字符串
>>> id(a)
2312403517808
>>> id(b)
2312403517808
>>> c = "l love you"
>>> d = "l love you" #字符串內(nèi)含空格等特殊字符,不開啟字符串駐留機(jī)制
>>> id(c)
2312403517872
>>> id(d)
2312403517936
>>>
引用計數(shù)機(jī)制:python中為了知道引用我當(dāng)前對象變量的個數(shù),在每一個對象當(dāng)中會存在一塊小小的空間,里面存放著引用計數(shù)
優(yōu)點:
- 簡單
- 實時性
缺點:
- 消耗內(nèi)存(循環(huán)引用的話計數(shù)永遠(yuǎn)不為0,即不會釋放)
例:
[1,2,3] 空間存在一個數(shù)據(jù)
引用計數(shù)機(jī)制開辟一個小空間記錄這個數(shù)據(jù)被引用的次數(shù)
[1,2,3] 0(被引用次數(shù)為0)
a = [1,2,3] 1(被引用一次)
b = a 2(被引用兩次)
b = None 1(被引用一次,切斷了b的引用)
a = None 0(沒有被引用,切斷了a的引用)
當(dāng)引用計數(shù)為0時,證明沒人使用,python解釋器就會將數(shù)據(jù)釋放出來
計算機(jī)垃圾回收機(jī)制:代碼在內(nèi)存中運行,函數(shù)等會進(jìn)行彈棧進(jìn)行內(nèi)存釋放,那么堆如何進(jìn)行內(nèi)存釋放呢?
java、python、c++不需要程序員自行回收機(jī)制,因為對程序員的要求太高,提供復(fù)雜的回收算法,其中引用計時法(解決80%問題,缺點,循環(huán)引用)看內(nèi)存有無被其他內(nèi)存引用,別人指向我,我有用。
循環(huán)引用會出現(xiàn)問題------出現(xiàn)標(biāo)記、清除算法。
sys.path
sys.path:獲取指定模塊搜索路徑的目錄名列表,列表中的第一項為當(dāng)前的工作目錄
import sys
print(sys.path)運行結(jié)果:
['D:\\st13\\python\\1.20', 'C:\\Python36\\python36.zip',
'C:\\Python36\\DLLs', 'C:\\Python36\\lib', 'C:\\Python36',
'C:\\Python36\\lib\\site-packages']
sys.getsizeof(<object>, <default>)
- 返回<object>的大小。
- 以字節(jié)為單位。
>>> class Test():
>>> pass
>>> t = Test()
>>> sys.getsizeof(t)
64
sys.hash_info
- 一個包含哈希參數(shù)的元祖。
- 返回的屬性包含:
>>>sys.hash_info
sys.hash_info(width=64, modulus=2305843009213693951, inf=314159,
nan=0, imag=1000003, algorithm='siphash24', hash_bits=64,
seed_bits=128, cutoff=0)
time模塊
?time.time( )
time.time( ) :返回當(dāng)前時間的時間戳
#時間戳:指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現(xiàn)在的總秒數(shù)
import time
print(time.time())
# 1596760621.3079221
time.ctime([secs])
time.ctime([secs]):返回當(dāng)前時間
把一個時間戳(按秒計算的浮點數(shù))轉(zhuǎn)化為time.asctime()的形式。如果參數(shù)未給或者為None的時候,將會默認(rèn)time.time()為參數(shù)
>>> time.ctime()
'Sun Oct 29 18:26:36 2023'
>>>
time.localtime([secs])
time.localtime([secs]):將一個時間戳轉(zhuǎn)換為當(dāng)前時區(qū)的struct_time(結(jié)果為元組)
import time
print(time.localtime())結(jié)果:
time.struct_time(tm_year=2020, tm_mon=8, tm_mday=7, tm_hour=8,
tm_min=38, tm_sec=57, tm_wday=4, tm_yday=220, tm_isdst=0)
time.strftime(格式,時間元組)
time.strftime(格式,時間元組) :將時間元組換一種格式(時間字符串)打印出來
如果時間元組未指定,則默認(rèn)傳入time.localtime()
%Y? ?四位的年
%y? ?兩位的年
%m? 月
%d? ?日
%H? ?時
%M? 分
%S? 秒
%X =?%H:%M:%S
例:打印格式為:2023/10/21? ?11:11:11
>>> time.strftime("%Y/%m/%d %H:%M:%S",time.localtime())
'2023/10/29 18:39:57'
>>>
>>> time.strftime("%Y/%m/%d %H:%M:%S")
'2023/10/29 18:42:09'
>>>
time.strptime(string[, format])
time.strptime(string[, format]):?把一個格式化時間字符串轉(zhuǎn)化為struct_time。實際上它和strftime()是逆操作。在這個函數(shù)中,format默認(rèn)為:"%a %b %d %H:%M:%S %Y"?
time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X') #要一一對應(yīng)
Output: time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5,
tm_hour=16, tm_min=37, tm_sec=6, tm_wday=3, tm_yday=125, tm_isdst=-1)
time.mktime(t)
time.mktime(t):將一個struct_time(時間元組)轉(zhuǎn)化為時間戳
time.mktime(time.localtime())
#Output: 1634864031.0
time.sleep(secs)
time.sleep(secs):線程推遲指定的時間運行。單位為秒
import time
time.sleep(2)
print("我執(zhí)行了...")
# 線程推遲2秒后執(zhí)行
datetime模塊
datetime.datetime模塊
datetime.now( )
datetime.now( ) :返回當(dāng)前時間(注意這是datetime.datetime里的方法)
>>> import datetime
>>> datetime.now()
Traceback (most recent call last):File "<stdin>", line 1, in <module>
AttributeError: module 'datetime' has no attribute 'now'
>>> from datetime import datetime
>>> datetime.now()
datetime.datetime(2023, 10, 29, 18, 58, 18, 486190)
>>>