b2b網(wǎng)站介紹友情鏈接是什么意思
模塊
內(nèi)置模塊
sys模塊
概述:Python 的 sys 模塊提供訪問(wèn)解釋器使用或維護(hù)的變量,和與解釋器進(jìn)行交互的函數(shù)。通俗來(lái)講,sys 模塊為程序與 Python 解釋器的交互,提供了一系列的函數(shù)和變量,用于操控 Python 運(yùn)行時(shí)的環(huán)境
sys.argv?
sys.argv :實(shí)現(xiàn)從程序外部向程序傳遞參數(shù)
sys.argv 變量是一個(gè)包含了命令行參數(shù)的字符串列表,利用命令行向程序傳遞參數(shù)。其中,腳本的名稱總是 sys.argv 列表的第一個(gè)參數(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運(yùn)行結(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í)行到主程序末尾,解釋器自動(dòng)退出,但是如果需要中途退出程序,可以調(diào)用 sys.exit() 函數(shù),帶有一個(gè)可選的整數(shù)參數(shù)返回給調(diào)用它的程序,表示你可以在主程序中捕獲對(duì) sys.exit() 的調(diào)用。(0是正常退出,其他為異常)當(dāng)然也可以用字符串參數(shù),表示錯(cuò)誤不成功的報(bào)錯(cuò)信息。
下面的例子,首先打印 'Hello',執(zhí)行完 sys.exit(1),執(zhí)行 except 語(yǔ)句,將 '中途退出' 作為參數(shù)傳遞給函數(shù) exitfunc(),然后將 '中途退出' 打印出來(lái),程序正常退出,不執(zhí)行后面的 print("Welcome") 語(yǔ)句
import sys
def exitfunc(value):print(value)sys.exit(0)
print("Hello")
try:sys.exit(1)
except SystemExit as value:exitfunc('中途退出')
print("Welcome")運(yùn)行結(jié)果:
Hello
中途退出
或者在終端上退出python解釋器
>>> sys.exit()C:\Users\朱俊杰>
sys.getrecursionlimit()
- 返回當(dāng)前遞歸的限制也就是Python解釋器堆棧最大深度的值。
- 該限制可防止無(wú)限遞歸導(dǎo)致C堆棧溢出和Python崩潰。它可以通過(guò)setrecursionlimit()設(shè)置。
>>> sys.getrecursionlimit()
1000
sys.setrecursionlimit(<limit>)
設(shè)置Python解釋器的堆棧最大深度為<limit>。
該限制可防止無(wú)限遞歸導(dǎo)致C堆棧溢出和Python崩潰。
最高可能的限制取決于平臺(tái)
>>> sys.setrecursionlimit(2000)
>>> sys.getrecursionlimit()
2000
sys.getrefcount(<object>)
- 獲取引用數(shù)量 引用計(jì)數(shù)的精確分析可能受到一些內(nèi)部因素的影響,通常情況下你只需要關(guān)注相對(duì)引用的變化,而不必過(guò)于關(guān)注具體的引用次數(shù)。
- 返回<object>的引用次數(shù)。
- 引用次數(shù)會(huì)比期望值值多一個(gè),因?yàn)樗琯etrefcount()參數(shù)的臨時(shí)引用。
>>> class Test():
>>> pass
>>> t = Test()
>>> sys.getrefcount(t) # t本身是Test,所以被引用了一次。
2
引出:
小整數(shù)對(duì)象池:python為了讓程序簡(jiǎn)單化,運(yùn)行更加迅速,在python解釋器加載的那一刻將一些常用的數(shù)字創(chuàng)建好(范圍:[-5,256])
- 范圍內(nèi)的數(shù)字稱為小整數(shù)
- 這個(gè)范圍稱為小整數(shù)對(duì)象池
>>> 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ù)對(duì)象池里的(常用)
>>> e = -10
>>> f = -10
>>> id(e)
2312402870448
>>> id(f)
2312402870704 #證明-10不是小整數(shù)對(duì)象池里的(不常用)
>>>
字符串駐留機(jī)制(Intern機(jī)制):創(chuàng)建普通字符串(不含空格等特殊字符)時(shí)打開(kāi),不重復(fù)創(chuàng)建字符串地址
>>> a = "love"
>>> b = "love" #普通字符串
>>> id(a)
2312403517808
>>> id(b)
2312403517808
>>> c = "l love you"
>>> d = "l love you" #字符串內(nèi)含空格等特殊字符,不開(kāi)啟字符串駐留機(jī)制
>>> id(c)
2312403517872
>>> id(d)
2312403517936
>>>
引用計(jì)數(shù)機(jī)制:python中為了知道引用我當(dāng)前對(duì)象變量的個(gè)數(shù),在每一個(gè)對(duì)象當(dāng)中會(huì)存在一塊小小的空間,里面存放著引用計(jì)數(shù)
優(yōu)點(diǎn):
- 簡(jiǎn)單
- 實(shí)時(shí)性
缺點(diǎn):
- 消耗內(nèi)存(循環(huán)引用的話計(jì)數(shù)永遠(yuǎn)不為0,即不會(huì)釋放)
例:
[1,2,3] 空間存在一個(gè)數(shù)據(jù)
引用計(jì)數(shù)機(jī)制開(kāi)辟一個(gè)小空間記錄這個(gè)數(shù)據(jù)被引用的次數(shù)
[1,2,3] 0(被引用次數(shù)為0)
a = [1,2,3] 1(被引用一次)
b = a 2(被引用兩次)
b = None 1(被引用一次,切斷了b的引用)
a = None 0(沒(méi)有被引用,切斷了a的引用)
當(dāng)引用計(jì)數(shù)為0時(shí),證明沒(méi)人使用,python解釋器就會(huì)將數(shù)據(jù)釋放出來(lái)
計(jì)算機(jī)垃圾回收機(jī)制:代碼在內(nèi)存中運(yùn)行,函數(shù)等會(huì)進(jìn)行彈棧進(jìn)行內(nèi)存釋放,那么堆如何進(jìn)行內(nèi)存釋放呢?
java、python、c++不需要程序員自行回收機(jī)制,因?yàn)閷?duì)程序員的要求太高,提供復(fù)雜的回收算法,其中引用計(jì)時(shí)法(解決80%問(wèn)題,缺點(diǎn),循環(huán)引用)看內(nèi)存有無(wú)被其他內(nèi)存引用,別人指向我,我有用。
循環(huán)引用會(huì)出現(xiàn)問(wèn)題------出現(xiàn)標(biāo)記、清除算法。
sys.path
sys.path:獲取指定模塊搜索路徑的目錄名列表,列表中的第一項(xiàng)為當(dāng)前的工作目錄
import sys
print(sys.path)運(yùn)行結(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
- 一個(gè)包含哈希參數(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)前時(shí)間的時(shí)間戳
#時(shí)間戳:指格林威治時(shí)間1970年01月01日00時(shí)00分00秒(北京時(shí)間1970年01月01日08時(shí)00分00秒)起至現(xiàn)在的總秒數(shù)
import time
print(time.time())
# 1596760621.3079221
time.ctime([secs])
time.ctime([secs]):返回當(dāng)前時(shí)間
把一個(gè)時(shí)間戳(按秒計(jì)算的浮點(diǎn)數(shù))轉(zhuǎn)化為time.asctime()的形式。如果參數(shù)未給或者為None的時(shí)候,將會(huì)默認(rèn)time.time()為參數(shù)
>>> time.ctime()
'Sun Oct 29 18:26:36 2023'
>>>
time.localtime([secs])
time.localtime([secs]):將一個(gè)時(shí)間戳轉(zhuǎn)換為當(dāng)前時(shí)區(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(格式,時(shí)間元組)
time.strftime(格式,時(shí)間元組) :將時(shí)間元組換一種格式(時(shí)間字符串)打印出來(lái)
如果時(shí)間元組未指定,則默認(rèn)傳入time.localtime()
%Y? ?四位的年
%y? ?兩位的年
%m? 月
%d? ?日
%H? ?時(shí)
%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]):?把一個(gè)格式化時(shí)間字符串轉(zhuǎn)化為struct_time。實(shí)際上它和strftime()是逆操作。在這個(gè)函數(shù)中,format默認(rèn)為:"%a %b %d %H:%M:%S %Y"?
time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X') #要一一對(duì)應(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):將一個(gè)struct_time(時(shí)間元組)轉(zhuǎn)化為時(shí)間戳
time.mktime(time.localtime())
#Output: 1634864031.0
time.sleep(secs)
time.sleep(secs):線程推遲指定的時(shí)間運(yùn)行。單位為秒
import time
time.sleep(2)
print("我執(zhí)行了...")
# 線程推遲2秒后執(zhí)行
datetime模塊
datetime.datetime模塊
datetime.now( )
datetime.now( ) :返回當(dāng)前時(shí)間(注意這是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)
>>>