Python常用的內建模組 - 程式人生
文章推薦指數: 80 %
引用其他模組,包含python內建模組和其他第三方模組; 避免函式名和變數名等名稱衝突。
模組的匯入方式. import. 直接使用import語句匯入標準 ...
程式人生>>Python常用的內建模組
Python常用的內建模組
阿新••發佈:2019-01-22
模組:
計算機在開發過程中,程式碼越寫越多,也就也來越難以維護,所以為了編寫可維護的程式碼,我們會把函式進行分組,放在不同的檔案裡。
在python裡,一個.py檔案就是一個模組。
模組的優點:
提高程式碼的可維護性。
提高程式碼的複用,當模組完成時就可以在其他程式碼中呼叫。
引用其他模組,包含python內建模組和其他第三方模組
避免函式名和變數名等名稱衝突。
模組的匯入方式
import
直接使用import語句匯入標準庫的模組:
importsys
print(sys.argv) #包含命令列引數的列表
print(sys.path) #自動查詢所需模組的路徑列表
import語句:
格式:importmodule1[,module2]
注意:一個模組只會被匯入一次,不管執行了多少次import,防止一次次的匯入記憶體中浪費記憶體
使用模組中的內容:
module.方法/變數/類
from……import……
作用:從模組中匯入一個指定的部分
格式:frommodulenameimportname…from……import*
作用:從模組中所有內容全部匯入當前名稱空間
注意:不應該過多的使用,佔用記憶體太多了。
容易導致變數的衝突
#注意!!兩個匯入包的區別,以time為例
importtime#第一種
time.sleep(0)
fromtimeimporttime#第二種
time.sleep(0)
fromtimeimport*#第三種
sleep(0)
"""兩個在匯入之後都可以呼叫sleep但是呼叫的方法書寫格式不同,第一種和第二種是要寫上包名,而第三種直接寫方法名,
但是在我們日常編寫中,我們都是採用前兩種種方式,以防止在程式碼塊中命名的重複,和降低程式碼閱讀的難度
注意如果想要在兩個包中能夠互相呼叫的話,採用第一種方式,這種情況一般都是用到自己寫的包的互相呼叫中
"""
模組中的__name__屬性:
每個模組都有一個__name__屬性,當其值為“__main__”時,表明該模組自身在執行,
否則是被當做模組引入,此時值為模組的名字
作用:模組就是一個可執行的python檔案,一個模組被另一個模組引入,想讓模組中的
某一程式不執行,我們可以用__name__屬性來使程式隱藏該塊內碼,當自身執行時,在執行‘該塊程式碼
一般程式的其實位置都是從__name__=="__main__"開始
包:
為了避免模組名的衝突,python又引入了按目錄來組織模組的方方稱為包(package)
特點:引入包以後,值頂層的包名不予別人衝突,那麼所有的模組都不會與比人衝突
注意:每個包下面都會有一個名為__init__.py的檔案,可以匯出包裡的內容
from包import(可以是方法名字只不過需要有init檔案也可以是模組的名字)
如果包裡面的模組相同了
from包.模組import方法
如果方法也相同了
from包.模組import方法as變數 #給其重新命名之後再去操作。
內建模組:
time模組:
UTC(世界協調時間):格林尼治時間,世界標準時間。
在中國我們UTC+8
DST(夏令時):是一種為了節約能源而人為規定地方時間的制度,一般在天亮早的夏季將時間提前一小時,時間段表示形式:
1.時間戳
以整型或者浮點型表示的是一個一秒為單位的時間間隔,這個時間的基礎是1970年的1月1日零時開始算
2.元組形式
一種python的資料表示,這個元組有9個整形元素,分別表示不同的時間含義
yearmonth(1-12)day(1-31)hours(0-23)minutes(0-59)seconds(0-59)weekday(0-60為週一)
Julianday(1-366):表示當前日期在本年是第幾天,dayintheyear
DSTflag(-1or0or1):夏令時格式,0表示正常格式,1表示為夏令時格式,-1表示根據當前的日期時間格式來判定
3.格式化字串
%a 本地簡化星期名稱
%A 本地完整星期名稱
%b 本地簡化月份名稱
%B 本地完整月份名稱
%c 本地相應的日期和時間表示
%d 一個月中第幾天(01-31)
%H 一天中的第幾個小時(24小時制度,00-23)
%I 一天中的第幾個小時(12小時制度,01-12)
%j 一年中的第幾天(001-366)
%m 月份(01-12)
%M 分鐘數(00-59)
%p 本地am或者pm的相應符號
%S 秒(00-59)
%U 一年中的星期數,以星期日為一個星期
%w 一個星期中的第幾天(0-6,0表示星期日)
%W 和%U基本相同,以星期一為一個星期
%x 本地相應日期
%X 本地相應時間
%y 去掉世紀的年份(00-99)
%Y 完整的年份
%Z 時區的名字,如果不存在未空字串
方法:
time():返回房錢的時間戳,浮點數形式,無須傳參 t1=time.time()
gmtime():將時間戳轉換為UTC時間元組格式,接收一個浮點型時間戳為引數,如果不傳預設為當前時間的時間戳 t2=time.gmtime()
localtime():將時間戳轉換為本地時間元組格式,接收一個浮點型時間戳為引數,如果不傳預設為當前時間的時間戳 t3=time.localtime()
mktime():將本地時間元組轉為時間戳,接收一個時間元組 t4=time.mktime(t3)
asctime():將時間元組格式轉為字串形式,接收一個時間元組,不傳預設為localtime時間的時間元組 t5=time.asctime(t3)
ctime():將時間戳轉為字串,接收一個時間戳,預設值為當前時間戳
t6=time.ctime()
strftime():將時間元組以指定的格式轉換字串格式沒接收一個字串格式化串,時間元組,不寫預設為localtime()
t7=time.strftime("%Y-%m-%d%X",t3)
strptime():將指定格式的時間字串解析為時間元組,是strftime逆過程,t8=time.strptime()
sleep():延遲一個時間段,整型或者浮點型
clock():返回當前程式執行時間,Unix系統時鐘返回全部執行時間,而windos從第二次開始都是以第一次呼叫次函式的時間戳為基準,而不是程式開始時間為基準。
tzset():改變本地時區
datetime模組
比time高階了不少,可以理解為datetime基於time進行了封裝,提供了更實用的函式介面
datetime模組的介面更直觀,更容易呼叫。
模組中的類:
datetime 同時有時間和日期
timedelta 主要用於計算時間跨度
tzinfo 時區相關
time 只關注時間
date 只關注日期
獲取當前時間
t1=datetime.datetime.now()
獲取指定時間
t2=datetime.datetime(199,10,1,8,8,8,0)
將時間轉為字串
t3=t1.strftime("%Y-%m-%d%X")
將格式化字串轉為datetime物件
t4=datetime.datetime.strptime(t3,"%Y-%m-%d%X")
時間相減,返回一個時間間隔
t5=datetime.datetime(199,10,1,8,8,8,0)
t6=datetime.datetime(199,10,2,8,8,8,0)
t7=t6-t5 天數和時間都告訴了t7.days間隔天數t7.second出去天數的秒數
日曆模組calendar
calendar.month(2018,8)返回某年某月
calendar.calendar(2018)返回某一年的
calendar.isleap()判斷是否是閏年
calendar.monthrange(2018,8)返回某個月的weekday的第一天開始星期和這個月的所有天數
calendar.monthcalendar(2018,8)返回的是這個月的序列沒有的就是0
collections模組
python內建的一個集合模組,提供了許多有用的集合類
namedtuple():
命名元組,本質是是一個函式,用它來建立一個自定義的tuple物件
規定tuple元素的個數,並可以用屬性而不是索引來引用tuple中的元素,用namedtuple定義一個新的資料型別
fromcollectionsimportnamedtuple
Point=namedtuple("Point",["x","y"])
point=Point(1,2)
print(point.x,point.y)
defaultdict():
在使用dict時,如果引用的key不存在,會丟擲KeyError異常,如果希望key不存在時,也能得到一個預設的值,就使用defautdict
fromcollectionsimportdefaultdict
d2=defaultdict(lambda:"XiaoHa")#預設值不存在就會得到裡面的值
d2["a"]=1
print(d2)
print(d2["a"])
print(d2["d"])
print(d2.get("d"))
除了key值不存在時,返回的是自己設定的值外其他的都和普通的dict方法運用相同。
OrdereDict():
我們平時使用dict時,key值的存放是無序的,對dict進行的帶時,無法儲存key的順序。
如果需要key值的有序性,就使用OrdereDict
fromcollectionsimportOrdereDict
d3=OrdereDict{[("a",[11,111]),("b","22"),("c","33")]}
print(d3)
print(d3["a"])
print(d3.get("a"))#字典的順序是按照存入時鍵值對的順序,其中也可以放入列表。
Counter():
Counter就是一個簡單的計數器,本質上是dict的一個子類,對列表中字串某個元素在列表中出現的數字統計,在對文章分析的時候這個會用到。
fromcollectionsimportCounter
a="XiaoHasayhelloworld"
c=Counter()
print(c)#一個Counter型別的
forchina:
c[ch]=c[ch]+1#對每個資料進行讀取一遍,然後再對其進行賦值得到個數
print(c)
uuid模組:
是一個128位的位元組的全域性唯一識別符號,通常由32位元組的字母穿表示,它可以保證時間和空間的唯一性,也稱為GUID
原理:
通過MAC地址、時間戳、名稱空間、隨機數、偽隨機數保證生成的ID的唯一性。
作用:
隨機生成字串,當成token使用,當成訂單號使用(要求不相同的字串)
演算法:
1、uuid1():基於時間戳的演算法
由MAC地址、當前時間戳、隨機陣列成,可以保證全球範圍沒的唯一性,但是由於MAC地址的使用時帶來的安全問題,區域網可以使用IP來代替MAC
2.、uuid2():基於分散式計算環境DCE的演算法
演算法和uuid1相同,但是不用的是把時間戳的前四位換為POSIX的UID,實際當中很少使用,在python中沒有這個函式。
3、uuid3():基於名字和MD5雜湊值的演算法
通過計算名字和名稱空間的MD4雜湊值得到的,保證了同一名稱空間中不同名字的唯一性和不同名稱空間的唯一性。
但同一名稱空間的相同名字生成相同的UUID
4、uuid4():基於隨機數的演算法
由偽隨機數得到的,有一定的重複概率,概率是可以計算出來的但是機率太小。
5、uuid5():基於名字和SAH1雜湊值的演算法
演算法和uuid3相同,不同的是使用SHA1演算法
使用經驗:
1、python中沒有DCE,所以uuid忽略使用
2、uuid4存在概率性重複,由於無對映性,最好不使用
3、如果在全域性的分散式環境下,最好使用uuid1
4、若名字的唯一性要求,最好使用uuid3或uuid5
importuuid
print(uuid.uuid1())
print(uuid.uuid4())
print(uuid.uuid3(uuid.NAMESPACE_DNS,"XiaoHa"))
print(uuid.uuid3(uuid.NAMESPACE_DNS,"XiaoHa"))
print(uuid.uuid3(uuid.NAMESPACE_DNS,"haha"))
print(uuid.uuid5(uuid.NAMESPACE_DNS,"XiaoHa"))
base64模組:
概念:
用記事本開啟圖片等檔案會看到一堆亂碼,是因為二進位制檔案包含很多無法顯示的內容,所以想讓記事本能處理二進位制資料,就需要將二進位制字串轉換。
base64就是一種常見的二進位制編碼方式
原理:
一個包含64個字元的陣列:["a"-"z","A"-"Z","0"-"9","+","/"]
對二進位制陣列進行處理,沒三個位元組一組,一組就是24bit,劃為4組,每組6bit,得到四個數字作為索引,然後查詢對應的表,得到相應的四個字元,就是編碼後的字串,在末尾如果不夠的話會使用=進行補位。
作用:
適用於小段內容的編碼,比如數字證書籤名,cookie,網頁中傳輸的少量二進位制資料。
注意:bsae64是一種通過查表的編碼方式,不能用於加密。
importbase64
#編碼
s1=b"helloworld"
print(base64.b64encode(s1))
#解碼
s2=b"aGVsbG8gd29ybGQ="
print(base64.b64decode(s2))
如果我們要編碼的二進位制不是3的倍數,base用\x00位元組在末尾補足,在編碼的末尾我們加上一個或者2個等號表示補了多少位元組,解碼時會自動去掉。
由於標準base64編碼後可能會出現+和/,在URL中不能直接作為引數
提供base64.urlsafe_b64encode()編碼,保證url的安全,將+和/替換成-和_,提供base64.urlsafe_b64decode()解碼
由於=字元可能出現在base64編碼中,但是=在url、cookie裡面會造成歧義,所以很多base64編碼會把=去掉
我們可以可以自定義編碼對照表列表中64個字元的排序,但是通常是不會有人用的
hashlib模組
提供了常見的摘要演算法:如IMD5,SHA1
摘要演算法:
又稱雜湊演算法,雜湊演算法。
原理:
它通過一個函式,把任意長度的資料轉為一個長度固定的資料串(通常十六進位制的字串表示)
加密:
MD5
最常見的照耀演算法,速度快,生成的結果是128位的位元組,通常用32位的16進位制字串表示
s1=b"XiaoHaisagoodman"
m5=hashlib.md5()
m5.updata(s1)
print(m5.hexdigest())
如果資訊量比較大,可以分多次呼叫updata,最後結果一樣
SHA1
呼叫SHA1和呼叫MD5完全一樣,SHA1的結果是160bit位元組,通常40位16進位制字串表示
s1=b"XiaoHaisagoodman"
sh1=hashlib.sha1()
sh1.updata(s1)
print(sh1.hexdigest())
SHA256
SHA512
越安全的演算法,不僅越慢,而且摘要會更長 可能會出現兩個不同的資料通過HASH演算法後得到了相同的摘要,因為摘要演算法是將無限多的資料對映到有限的集合中,如果兩個資料的摘要相同,稱之為碰撞,但是非常渺茫
應用:
任何允許使用者登入的網站都會儲存使用者登入的使用者和密碼,那麼密碼一般儲存的是原密碼的摘要值,如果明文存到資料中,如果資料庫洩露,所有使用者資訊會暴露,正確的儲存口令的方式不是儲存明文,而是儲存口令的摘要,當用戶登入時首先會計算使用者輸入的明文口令的摘要,和資料庫中的對比,如果一致說明口令正確否則一定錯誤。
hmac模組
是使用一個key對資料進行“雜讀”後在進行的hash,使用hmac比hash更安全,不同的key會產生不同的hash。
對同一條資料,key不同得到的摘要值不同。
importhmac
s=b"XiaoHaisagoodman"
key=b"haha"
h=hmac.new(key,s,digestmod="MD5")
print(h.hexdigest())
itertools模組:
無限迭代:count(start=0,step=1)
cycle(iterable):把傳入的序列無限重複下去
repeat(object[,times]):把一個元素無限重複下去,如果提供了第二個引數,就可以指定重複次數
有限迭代:chain(*iterables)
把一組迭代物件串聯起來,形成一個迭代物件
importitertools
c=itertools.count()
foriinc:
print(i)
time.sleep(1)
cy=itertools.cycle("XiaoHa")
foriincy:
print(i)
time.sleep(1)
r=itertools.repeat("XiaoHa",3)
foriinr:
print(i)
time.sleep(1)
cha=itertools.chain("ABC","abc")
foriincha:
print(i)
time.sleep(1)
g=itertools.groupby("aavbbbccdebfff")
forkey,valueing:
print(key,list(value))
time.sleep(1)
排列組合
全排列 itertools.permutations(iterable,len)
從n個不同的元素中取出m個元素,按照一定的序列排成一列,叫做從n個元素中獲取m個元素的一個排列,當m=n時叫做全排列
組合 itertools.combinations(iterable,n)
從n個不同的元素中,任意m個元素為一組,叫做從n個不同元素中取出m個元素的組合
排列組合(笛卡爾積)itertools.product(*iterable,repeat=1,)
#全排列 數學A
p=list(itertools.permutations([1,2,3,4],4))
print(p)
#組合數學C
c=list(itertools.combinations([1,2,3,4],4))
print(c)
#排列組合
pc=list(["".join(x)forxinitertools.product("0123456789",repeat=4)])
print(pc)
為什麼建構函式不能宣告為虛擬函式,解構函式可以
«上一篇
Concepts:Core,Processor,CPU,Die,Package,andLogicalCore下一篇»
相關推薦
Python常用內建模組——學習筆記
1、datetime:Python處理日期和時間...
python常用內建模組:datetime
使用
匯入datetime模組下的datetime類,如果只是importdatetime那麼呼叫要通過d...
python學習筆記:第21天常用內建模組-1
目錄
一、collections模組
二、時間模組
也可以在我的個人部落格上閱讀
一、collections模組
1.Counter
...
Python基礎之十二常用內建模組
'''
datetime
datetime是Python處理日期和時間的標準庫
''...
常用內建模組
什麼是模組?
模組就是已經寫好,包含了python定義和宣告的檔案.
模組分為內建模組,第三方模組和自定義模組,
使用模組中的內容需要提前...
Python17個常用內建模組總結(運維)
1、getpass2、os3、sys4、subprocess5、hashlib6、json7、pi...
day15-python常用內置模塊的使用
combine創建如果clas類屬性最大實例個數-i在日常的開發工作中,我們要寫很多的python...
學習筆記(11月10日)--python常用內置模塊的使用(logging,os,command)
學習筆記python培訓四周五次課(11月10日)一、logging日誌是我們排查問題的關鍵利器,寫好日誌記錄,當我們發生問題時,可以快速定位代碼...
python_常用內置模塊
none整數RMchoice格式化24小時srcnbspAS一、time模塊(時間模塊):
表示時間...
python通過內建模組監控磁碟、記憶體、CPU、負載
01.概述
閒來無事幹,說幹就幹。
主要是通過python函式以及python內建模組來實現對磁碟、記憶體、CPU、負載的資料採集,然後傳送到企業號,併到達微...
搜尋
基礎教學
Mysql入門
Sql入門
Android入門
Docker入門
Go語言入門
Ruby程式入門
Python入門
Python進階
Django入門
Python爬蟲入門
最近訪問
Python常用的內建模組
用+JMX+檢測應用程式
PXE+kickstart無人值守安裝CentOS
.Net+Core小技巧+-+使用Swagger上傳文件
Java+資料持久化系列之JDBC
OpenCV-FLANN識別
IO模型——阻塞IO、非阻塞IO、多路複用IO、非同步IO、selectors模組
C#幾種擷取字串的方法(split+、Substring、Replace、remove)
CANoe+入門+Step+by+step系列(一)基礎應用
Oracle+RAC阻塞排查SQL指令碼
延伸文章資訊
- 1Python 101 基礎教學(9) - 模組module 與套件package
寫程式從來就是站在巨人的肩膀上。Python 提供了許多的內建模組便利我們加速開發,事半功倍。除此之外你可以用第三方的函式庫,你也可以自己造輪子, ...
- 2解析Python模組(Module)和套件(Package)的概念
四、dir()函式(dir function). Python提供了一個內建函式dir(),用來顯示物件(Object)的 ...
- 3第6 章Python 模組
∗ 模組(Module) · ▸ 一個模組是一個檔案,內含Python 程式的指令,可讓其他程式應用 · ▸ Python 標準函式庫(Standard library) 內含許多模組.
- 410. Python 標準函式庫概覽— Python 3.10.6 說明文件
務必使用 import os 而非 from os import * 。這將避免因系統不同而有實作差異的 os.open() 覆蓋內建函式 open() 。 在使用 os 諸如此類大型模組時搭配...
- 5Python 自學第七天:Module 模組
也就是使用其他.py 檔案中,預先定義好的變數和函式。使用模組的好處就是,別人寫過或自己定義過的變數和函式可以直接拿來使用。 Python 有一些內建好 ...