1. 程式人生 > 實用技巧 >自定義模組 random

自定義模組 random

自定義模組:

  • 什麼是模組:本質就是.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個數據,組成一個列表返回。