自定義模組 random
阿新 • • 發佈:2020-07-09
自定義模組:
-
什麼是模組:本質就是.py檔案,封裝語句的最小單位。
-
自定義模組:實際上就是定義.py,其中可以包括:變數定義,可執行語句,for迴圈,函式定義等等。它們統稱為模組的成員。
模組的執行方式:
- 指令碼方式:直接用直譯器執行。或者PyCharm中右鍵執行。
- 模組方式:被其他的模組匯入。為匯入它的模組提供資源(變數,函式定義,類定義等)。
__name__
屬性的使用:
在指令碼方式執行時,__name__
是固定的字串:__main__
在以模組方式被匯入時,__name__
就是本模組的名字。
在自定義模組中對__name__
進行判斷,決定是否執行可執行語句:開發階段,就執行,使用階段就不執行。
系統匯入模組的路徑
- 記憶體中:如果之前成功匯入過某個模組,直接使用已經存在的模組
- 內建路徑中:安裝路徑下:Lib
- PYTHONPATH:import時尋找模組的路徑。
- sys.path:是一個路徑的列表。
如果上面都找不到,就報錯。
通過動態修改sys.path的方式將自定義模組新增到sys.path中。
os.path.dirname():獲取某個路徑的父路徑。通常用於獲取當前模組的相對路徑
import sys
import os
sys.path.append(os.path.dirname(__file__) + '/aa')
匯入模組的多種方式:
- import xxx:匯入一個模組的所有成員
- import aaa,bbb:一次性匯入多個模組的成員。不推薦這種寫法,分開寫。
- from xxx import a:從某個模組中匯入指定的成員。
- from xxx import a,b,c:從某個模組中匯入多個成員。
- from xxx import *:從模組中匯入所有成員。
import xxx 和 from xxx import * 的區別
第一種方式在使用其中成員時,必須使用模組名作為字首。不容易產生命名衝突。
第二種方式在使用其中成員時,不用使用模組名作為字首,直接使用成員名即可。但是容易產生命名衝突。在後定義的成員生效(把前面的覆蓋了。)
怎麼解決名稱衝突的問題
- 改用import xxx這種方式匯入。
- 自己避免使用同名
- 使用別名解決衝突
使用別名:alias
給成員起別名,避免名稱衝突。
from my_module import age as a
給模組起別名,目的簡化書寫。
import my_module as m
from xxx import * 控制成員被匯入
預設情況下,所有的成員都會被匯入。
__all__
是一個列表,用於表示本模組可以被外界使用的成員。元素是成員名的字串。
注意:
__all__
只是對from xxx import *這種匯入方式生效。其餘的方式都不生效。
相對匯入
針對某個專案中的不同模組之間進行匯入,稱為相對匯入。
只有一種格式:
from 相對路徑 import xxx
相對路徑:包含了點號的一個相對路徑。
. 表示的是當前的路徑。
..表示的是父路徑。
...表示的是父路徑的父路徑。
# 相對匯入同項目下的模組
# from ..z import zz # 容易向外界暴露zz模組
from ..z.zz import *
# 不使用相對匯入的方式,匯入本專案中的模組
# 通過當前檔案的路徑找到z的路徑
import os
import sys
sys.path.append(os.path.dirname(os.path.dirname(__file__)) + '/z')
from zz import *
常用模組:random
此模組提供了和隨機數獲取相關的方法:
- random.random():獲取[0.0,1.0)範圍內的浮點數
- random.randint(a,b):獲取[a,b]範圍內的一個整數
- random.uniform(a,b):獲取[a,b)範圍內的浮點數
- random.shuffle(x):把引數指定的資料中的元素打亂。引數必須是一個可變的資料型別。
- random.sample(x,k):從x中隨機抽取k個數據,組成一個列表返回。