1)模塊被其餘模塊導入時,其中的可執行語句會當即執行。所以python中提供了一種能夠判斷自定義模塊是屬於開發階段仍是使用階段的屬性,即__name__
:print(__name__)#編寫在自定義模塊中
以腳本方式運行時是固定的字符串__main__
,在以模塊被導入的方式運行時,會打印出自定義模塊名。所以能夠在自定義模塊代碼中編寫if __name__ =='__main__:'
以用來判斷是否須要直接運行模塊中的語句(即判斷是處於開發階段仍是使用階段)。python
2)一般定義函數(包含測試函數),再將函數的調用放在if __name__=='__main__':
(快捷鍵:main+回車)代碼塊下。這樣當自定義模塊被導入時可執行語句不會直接運行。app
3)自定義模塊的使用:模塊名.成員名(以import xxx
方式導入)
4)在同級目錄下導入模塊:直接導入。dom
5)在不一樣的目錄下導入模塊(若相對導入能夠解決就用相對導入,相對導入下文有介紹):
系統導入模塊的路徑:
1)內存中:若是以前成功導入過某個模塊,會直接使用已經存在的模塊。
2)內置路徑中:在python安裝路徑中lib和site-packages文件夾下。
3)sys.path(沒有提供源碼,用c語言編寫直接集成在解釋器上):是一個路徑的列表(動態可修改)。
4)查看sys.path內容:import sys print(sys.path)
打印出的列表第一個元素是當前腳本路徑,第二個元素是當前項目的路徑。
5)__file__
可獲取當前文件的絕對路徑。可以使用os模塊獲取一個文件路徑的父路徑:import os os.path.dirname(__file__)
6)將自定義模塊文件夾所在的路徑添加到sys.path中:
python import os import sys sys.path.append('模塊文件夾路徑')
6)自定義模塊書寫標準:一般一個腳本中都會包含if __name__=='__main__':
函數
def func(): ...... def main(): #測試函數 pass if __name__=='__main__': main()
import xxx
:導入一個模塊的全部成員。必須使用模塊名做爲前綴。import xxx,yyy,....
:一個性導入多個模塊的成員,不推薦這種寫法,建議分開寫。但常常將這兩個模塊放在一塊寫:import os,sys
from xxx import y
:從某個模塊中導入指定的成員。from xxx import a,b,c,......
:從某個模塊中導入多個成員。from xxx import *
:默認從某個模塊中導入所有成員,不用使用模塊名做爲前綴,直接使用成員名便可。爲了不導入多餘的成員python默認使用了一個指令__all__
,它是一個列表,用於表示本模塊能夠被外界使用的成員,元素是成員名組成的字符串。即在自定義模塊中編寫__all__=['','',...]
列表中應是可被導入用的成員。但__all__
只對此種導入方法起做用。import xxx as z
導入xxx模塊重命名爲z。from xxx import yyy as z
導入xxx模塊將成員名重命名爲z。1)針對某個項目中的不一樣模塊之間進行導入,稱爲相對導入(模塊間必須有同一個文件夾路徑)。測試
2)相對導入只有一個語法:from 相對路徑 import xxx
相對路徑:包含了點號的一個相對路徑。
.:表示當前的路徑。
..:表示的是父路徑
...:表示的是父路徑的父路徑
..x.y:表示的是父路徑下x文件夾下的y文件(夾)code
舉例:在python文件夾下有t1和t2兩個文件夾,t1和t2文件夾下分別有pt1.py和pt2.py兩個模塊。python文件夾在WorkSpace文件夾下,WorkSpace下有一個main.py文件。orm
#相對導入(在pt1.py文件中編寫): #1.將pt1做爲對外界的接入口: from ..t2 import pt2 #..:從當前的路徑(不包含當前文件,即/WorkSpace/python/t1)的父目錄(/WorkSpace/python/)下找t2,在從t2中找pt2。 #測試相對導入(在main.py文件中編寫): import os,sys sys.path.append(os.path.dirname(__file__)) #把項目所在的父路徑加到sys.path中。 from python.t1 import pt1 #使用pt1.py模塊文件導入的pt2.py模塊中的成員: pt1.pt2.成員名 #但不推薦這樣寫。容易向外界暴露pt2模塊。 #更改方法(真正的相對導入): #相對導入(在pt1.py文件中編寫): #1.將pt1做爲對外界的接入口: from ..t2.pt2 import * #直接導入pt2模塊 #測試相對導入(在main.py文件中編寫): import os,sys sys.path.append(os.path.dirname(__file__)) #把項目所在的父路徑加到sys.path中。 from python.t1 import pt1 #使用pt1.py模塊文件導入的pt2.py模塊中的成員: pt1.成員名 #成員名:能夠是pt1和pt2模塊的成員。 #不用相對導入(不推薦): #1.在pt1模塊下編寫: import os,sys sys.path.append(as.path.dirname(os.path.dirname(__file__))+'/t2') from pt2 import *
1)random模塊(pseudo-random,僞隨機數):提供了隨機數獲取的方法
1)random.random():獲取[0.0,1.0)範圍內的浮點數。
2)random.randint(a,b):獲取[a,b]範圍內的一個整數。
3)random.uniform(a,b):獲取[a,b]範圍內的一個浮點數數。
4)random.shuffle(x):把參數指定的數據中的元素打亂,參數必須是一個可變的數據類型。沒有返回值(由於是直接將x打亂,調用改函數後x會被改變,與append無返回值緣由相同。)(不支持元祖,可用sample打亂)
5)random.sample(x,k):從x中隨機抽取k個數據,組成一個列表返回。
6)random.randrange(start,stop,step):生成一個[start,stop)之間以step爲步長的隨機整數。默認步長爲1。
7)random.seek(a):設置初始化隨機數種子。a,隨機數種子,能夠是整數或浮點數。使用random庫產生隨機數不必定要設置隨機數種子,若是不設置,random庫默認以系統時間產生當作隨機數種子。設置隨機數種子的好處是能夠重複在現相同的隨機數序列。內存