[Python][華為云Python編程創(chuàng)造營(yíng)][學(xué)習(xí)筆記](méi)[07_模塊和標(biāo)準(zhǔn)庫(kù)]
1,輪子和模塊
1.1,程序員和輪子
- 程序員:"不要重復(fù)造輪子"。
1.2,程序中的輪子
- 在程序中,我們將封裝好的組件、庫(kù)稱為輪子。它可以拿來(lái)直接用,實(shí)現(xiàn)對(duì)應(yīng)的功能。
- 發(fā)明輪組與造輪子:不要重復(fù)發(fā)明輪子
- 在Python中一個(gè)工具庫(kù)就像是一個(gè)輪子:一個(gè)輪子由很多模塊組成。
1.3,模塊簡(jiǎn)介(1)
- 在計(jì)算機(jī)程序的開發(fā)過(guò)程中,隨著代碼增多,在一個(gè)文件里代碼會(huì)越來(lái)越長(zhǎng),越來(lái)越不容易維護(hù)。
- 為了編寫可維護(hù)的代碼,我們把很多函數(shù)分組,分別放到不同的文件里,這樣,每個(gè)文件包含的代碼就相對(duì)較少,很多編程語(yǔ)言都采用這種組織代碼的方式。在Python中,一個(gè).py文件就可以稱之為一個(gè)模塊(module)。
1.4,模塊簡(jiǎn)介(2)
- 第三方工具包:
Pandas:數(shù)據(jù)處理與分析
Numpy:科學(xué)計(jì)算
Matplotlib:繪圖
Scikit-learn:基于SciPy和Numpy的開源機(jī)器學(xué)習(xí)模塊
Tensorflow:深度學(xué)習(xí)框架
- 標(biāo)準(zhǔn)庫(kù):
os,sys,time
1.5,模塊的作用
- 模塊是Python中的最高級(jí)別組織單元,它將程序代碼和數(shù)據(jù)封裝起來(lái)以便重用。
- 模塊的三個(gè)角色:
代碼重用。
系統(tǒng)命名空間的劃分(模塊可理解為變量名的封裝,即模塊就是命名空間)。
實(shí)現(xiàn)共享服務(wù)和數(shù)據(jù)。
1.6,Python程序的架構(gòu)
- Python源代碼文件:*.py。
- 一個(gè)py文件是一個(gè)模塊(module)。
- 多個(gè)模塊可以組成一個(gè)包(package)。
- 包是一個(gè)目錄。要被python視為包,目錄中必須包含__init__.py文件,包的導(dǎo)入會(huì)首先執(zhí)行__init__.py。其他模塊加入包中,放入包的目錄即可。
1.7,模塊的執(zhí)行環(huán)境
- 模塊包含變量、函數(shù)、類以及其他的模塊(如果導(dǎo)入的話),而函數(shù)也有自己的本地變量。
1.8,模塊導(dǎo)入的方式
導(dǎo)入從本質(zhì)上講,就是在一個(gè)文件中載入另一個(gè)文件,并且能夠讀取那個(gè)文件的內(nèi)容。一個(gè)模塊內(nèi)的內(nèi)容通過(guò)這樣的方法其屬性(attributes)和方法(methods)能夠被外界使用。
1.8.1,導(dǎo)入整個(gè)模塊
- 使用方法一:在"import"后加上"模塊名稱"。
import numpy
通過(guò)這一句,計(jì)算機(jī)就在指定的位置找到了"numpy.py"文件,并準(zhǔn)備好該文件擁有的之后會(huì)用到的函數(shù)和屬性。在導(dǎo)入"numpy"后,我們就可以通過(guò)點(diǎn)符號(hào)"."連接模塊名稱和函數(shù)名,使用該模塊中的函數(shù)和屬性。
numpy.sqrt(2)
1.8.2,import搜索的路徑順序
- 以上四個(gè)組件組合起來(lái)就變成了sys.path,其保存了模塊搜索路徑在機(jī)器上的實(shí)際配置,可以通過(guò)打印內(nèi)置的sys.path列表來(lái)查看這些路徑。
- 搜索路徑1和3是系統(tǒng)自定義的,而2和4可以用于拓展路徑,從而加入自己的源代碼目錄。
2,Python的內(nèi)置模塊
2.1,Python內(nèi)置工具包
在安裝Python解釋器后可以直接使用的工具包:
- os,負(fù)責(zé)程序與操作系統(tǒng)的交互,提供了訪問(wèn)操作系統(tǒng)底層的接口。
- sys,負(fù)責(zé)程序與Python解釋器的交互,提供了一系列的函數(shù)和變量,用于操控Python運(yùn)行時(shí)的環(huán)境。
- time,是Python中處理時(shí)間的一個(gè)重要模塊,包含了許多的有關(guān)時(shí)間操作的方法。
- random,Python隨機(jī)函數(shù)庫(kù)。
- datetime,Python中可操作日期和時(shí)間的模塊。
- ...
2.2,Python os庫(kù)基本使用方法(1)
常用的路徑操作函數(shù)如下:
- os.getcwd():獲取當(dāng)前所在的路徑。
- os.chdir(path):改變當(dāng)前工作目錄。
- os.listdir():返回目錄下的所有文件。
- os.walk():返回目錄下所有文件(包括子文件夾中的文件)。
import os cwd=os.getcwd() print("當(dāng)前所在路徑為:",cwd) os.chdir("../") # ../指的是當(dāng)前目錄上一級(jí)父目錄,此語(yǔ)句表示改變當(dāng)前工作目錄至上一級(jí)目錄 print("當(dāng)前目錄下的文件有:",os.listdir(cwd))
2.3,Python os庫(kù)基本使用方法(2)
os.path子模塊:
- os.path.join(path):按當(dāng)前系統(tǒng)所能識(shí)別的方式鏈接目錄名。
- os.path.abspath(path):返回絕對(duì)路徑。
- os.path.exists(path):文件存在則返回True,不存在返回False。
- os.path.getsize(path):返回文件大小,如果文件不存在就返回錯(cuò)誤。
import os os.path.join('home','username','notebooks') # 在Windows下等同于/home/username/notebooks print("text0.txt的絕對(duì)路徑為:",os.path.abspath("text0.txt")) print("text0.txt是否存在:",os.path.exists("text0.txt")) print("text0.txt的文件大小:",os.path.getsize("text0.txt"))
2.4,Python os庫(kù)基本使用方法(3)
- os.path.isfile(path):判斷路徑是否為文件,如果是文件就返回True,不是就返回False。
- os.path.isdir(path):判斷路徑是否為文件夾,如果是文件夾就返回True,不是就返回False。
import os print("text0.txt是否為文件:",os.path.isfile("text0.txt")) print("text0.txt是否為文件夾:",os.path.isdir("text0.txt"))
2.5,Python sys庫(kù)基本使用方法(1)
sys模塊主要是針對(duì)與Python解釋器相關(guān)的變量和方法,提供對(duì)解釋器使用或維護(hù)的一些變量的訪問(wèn),以及與解釋器強(qiáng)烈交互的函數(shù)。
常用函數(shù)如下:
- sys.exit([n]):此方法可以使當(dāng)前程序退出。
import sys for i in range(100): print(i) if i==5: sys.exit(0)
2.6,Python sys庫(kù)基本使用方法(2)
- sys.path:獲取模塊搜索路徑
- path是一個(gè)目錄列表,供Python從中查找模塊。在Python啟動(dòng)時(shí),sys.path根據(jù)內(nèi)建規(guī)則和Python的PATH變量進(jìn)行初始化。sys.path的第一個(gè)元素通常是個(gè)空字符串,表示當(dāng)前目錄。
- sys.path本質(zhì)上是一個(gè)列表,可以進(jìn)行append,insert,pop,remove等各種列表相關(guān)的操作,但通常都進(jìn)行append操作,添加自己想要的查找路徑。
2.7,Python sys庫(kù)基本使用方法(3)
- sys.platform:獲取當(dāng)前系統(tǒng)平臺(tái)。
- sys.argv:從程序外部向程序傳遞參數(shù),參數(shù)以列表的形式傳遞,第一個(gè)為當(dāng)前文件名。
import sys sys.platform print(sys.argv[0])
2.8,Python time庫(kù)(1)
time庫(kù)用于獲取時(shí)間,包括日期和當(dāng)前時(shí)間點(diǎn)。常用的函數(shù)包括:
- time.time():用于獲取當(dāng)前時(shí)間戳,還可以用于輸出某個(gè)代碼塊的運(yùn)行時(shí)間。
import time time1=time.time() ######代碼塊###### for i in range(100000): pass ######代碼塊###### time2=time.time() print("時(shí)間戳1:",time1) # 時(shí)間戳1: 1636161110.4614594 print("時(shí)間戳2:",time2) # 時(shí)間戳2: 1636161110.46646 print("運(yùn)行總時(shí)長(zhǎng):",time2-time1) # 運(yùn)行總時(shí)長(zhǎng): 0.005000591278076172
2.9,Python time庫(kù)(2)
- time.localtime():將時(shí)間戳轉(zhuǎn)化為時(shí)間元組。
import time time_now=time.time() localtime=time.localtime(time_now) print("本地時(shí)間為:",localtime) # 輸出結(jié)果為 # 本地時(shí)間為: time.struct_time(tm_year=2021, tm_mon=11, tm_mday=6, tm_hour=9, tm_min=16, tm_sec=49, tm_wday=5, tm_yday=310, tm_isdst=0)
3.0,Python time庫(kù)(3)
- time.asctime():獲取格式化的時(shí)間,通常用于將時(shí)間元組轉(zhuǎn)化為可讀性較強(qiáng)的格式。
import time time_now=time.time() localtime=time.localtime(time_now) localtime2=time.asctime(localtime) print("本地時(shí)間為:",localtime2) # 本地時(shí)間為: Sat Nov 6 09:39:49 2021
- 或者使用time.strftime(format,[,t]):接收時(shí)間元組,并返回以可讀字符串表示的當(dāng)?shù)貢r(shí)間,格式由參數(shù)format決定。
import time print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())) # 2021-11-06 10:00:24
3.1,Python random庫(kù)(1)
- random庫(kù)是Python里以一定規(guī)律產(chǎn)生隨機(jī)數(shù)的標(biāo)準(zhǔn)庫(kù)。
- random隨機(jī)數(shù)生成庫(kù)的使用:
random.random():生成0-1之間的隨機(jī)數(shù)。
random.randint(m,n):返回m到n之間的隨機(jī)整數(shù),包含m和n。
from random import * # 生成0-1之間的隨機(jī)數(shù),服從正態(tài)分布。 print("隨機(jī)選取0<=x<=1的隨機(jī)浮點(diǎn)數(shù):",random()) # 隨機(jī)選取0<=x<=1的隨機(jī)浮點(diǎn)數(shù): 0.09918964100146255 # 返回指定區(qū)間的隨機(jī)整數(shù) print("隨機(jī)選取-3<=x<10的隨機(jī)整數(shù):",randint(-3,10)) # 隨機(jī)選取-3M=x<10的隨機(jī)整數(shù): 1
3.2,Python random庫(kù)(2)
- random.randrange():返回指定區(qū)間的隨機(jī)數(shù),可指定步長(zhǎng)。
注意:randint(start,end)相當(dāng)于randrange(start,end,1)
- random.uniform():隨機(jī)選取指定范圍的隨機(jī)浮點(diǎn)數(shù)。
from random import * # 返回指定區(qū)間的隨機(jī)整數(shù),可指定步長(zhǎng)r print("在[-3,1,5,9]里隨機(jī)挑一個(gè):",randrange(-3,10,4)) # 在[-3,1,5,9]里隨機(jī)挑一個(gè): 9 # 均勻而隨機(jī)選取指定范圍的隨機(jī)浮點(diǎn)數(shù),服從均勻發(fā)布 print("隨機(jī)選取-5<=x<5的隨機(jī)浮點(diǎn)數(shù):",uniform(-5,5)) # 隨機(jī)選取-5<=x<5的隨機(jī)浮點(diǎn)數(shù): 4.7063137283904215
3.3,Python random庫(kù)(3)
- random.sample():隨機(jī)選取指定數(shù)量的樣本。
- random.shuffle():洗牌。即將列表中元素順序打亂。
from random import sample, shuffle l = list(range(10)) # 隨機(jī)選取5個(gè)樣本 print("從0<=x<10中隨機(jī)選5個(gè)數(shù):",sample(l,5)) # 從0<=x<10中隨機(jī)選5個(gè)數(shù): [8, 3, 5, 6, 7] l = list(range(10)) print("打亂前:",l) # 打亂前: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] shuffle(l) # 洗牌,即將列表中元素順序打亂。 print("打亂后:",l) # 打亂后: [9, 8, 2, 6, 3, 1, 0, 7, 5, 4]
3.4,Python datetime庫(kù)(1)
- datetime是Python中關(guān)于日期時(shí)間操作模塊,內(nèi)置了諸多關(guān)于日期時(shí)間轉(zhuǎn)化和計(jì)算的方法。
- datetime庫(kù)中的操作主要是對(duì)其中四個(gè)類的操作:
datetime.date:日期類
datetime.time:時(shí)間類
datetime.datetime:時(shí)間日期類
datetime.timedelta:時(shí)間計(jì)算類
3.5,Python datetime庫(kù)(2)
- datetime.date:
today():獲取今天的日期。
strftime(format):格式化為需要的時(shí)間格式。
timple():將日期轉(zhuǎn)成struct_time格式。
fromtimestamp(timestamp):將時(shí)間戳轉(zhuǎn)化為date對(duì)象。
- datetime.time:
datetime.time.(format):格式化輸出。
3.6,Python datetime庫(kù)(3)
- datetime.datetime:
now():返回當(dāng)前日期時(shí)間對(duì)象。
ctime():返回日期時(shí)間字符串。
date():返回當(dāng)前日期對(duì)象。
time():返回時(shí)間對(duì)象。
- datetime.timedelta:
d1-d2:返回兩個(gè)日期之間的timedelta對(duì)象。
days():返回兩個(gè)日期之間的天數(shù)。
total_seconds():返回總秒數(shù)。
Python
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。