Module
一個 Python 檔案 (.py) 檔就是一個模組 (module) ,模組內可以定義變數 (variable) 、函數 (function) 、類別 (class) 或是任何需要的程式內容。利用關鍵字 (keyword) import ,我們可以在模組裡用其他定義好的模組內容。
模組的使用
建立模組:
- 建立一個A,py檔
- 建立第二個B,py檔
- 在第二個檔案輸入import A
- 亦可使用from ModuleName import FunctionName
- Python會將載入的模組編譯成A.pyc於B.py檔旁邊
- 使用第二個方法可以使用‘*’表示載入所有函數
- 用help()函數可以將模組定義的函數備註文字輸出
- from module import * ,將module中的函數全部匯入,可以直接呼叫函數名稱來使用,不需要用module.function的方式來呼叫。
__name__
當在第二個檔案使用 import A,程式會先執行A,py模組中所有未縮排的程式碼後,才繼續執行B,py的程式碼。那我們是否應該把執行程式的模組跟放定義的模組分開來呢?大可不必,很多時候我們需要直接測試定義是否合用,因此直接放在相同檔案裡會比較方便,可是當作為其他檔案引入的時候,我們得用一套機制來區分引入跟非引入的情況,這個就得利用 Python 執行環境的預設變數 __name__ 了,當這個變數等於 "__main__" 的時候,就代表目前的模組是執行程式。
範例1:
#-*-coding:UTF-8
-*-
# 模組範例檔_1
#
import
random
if
__name__ == '__main__': #被當主程式時才會被執行
print('模組範例檔_1')
class
tools:
def generate_random_nums(self,len):
nums=[]
for i in range(len):
nums.append(random.randint(1,100))
return nums
Out:
模組範例檔_1
範例2:
#-*-coding:UTF-8
-*-
# EX08_02_2.py
#
# 模組範例檔_2
#
import
EX08_02_1
if
__name__ == '__main__': #被當主程式時才會被執行
print('模組範例檔_2')
tools
= EX08_02_1.tools()
print(tools.generate_random_nums(10))
Out:
模組範例檔_2 #print('模組範例檔_1')非主程式,因此未被執行
[60,
58, 37, 16, 10, 96, 11, 47, 8, 93]
範例3: #使用from
#使用from
from
EX08_02_1 import tools
if
__name__ == '__main__':
print('模組範例檔_2')
tool =
tools()
print(tool.generate_random_nums(10))
# import...as...用法
import
EX08_02_1 as ex
if
__name__ == '__main__':
print('模組範例檔_2')
tool =
ex.tools()
print(tool.generate_random_nums(10))
範例3、4之Out皆同範例2
The Python Standard Library
https://docs.python.org/3.5/library/index.htmlOS Module -- Miscellaneous operating system interfaces
提供顯示系統環境參數與指令功能函數os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
- 對檔案或目錄更換名稱
- src引數是原本的資料夾
- dst引數是修改後的資料夾名稱
os.renames('old.txt','new.txt'),'d:\\temp'
os.remove(path, *, dir_fd=None)
- 移除檔案
- path引數傳入檔案位置
- 不會移除資料夾
- 移除空的資料夾
- 輸出path引數位置的目錄和檔案名稱
- 切換目錄到path引數位置
- 顯示目前所在的目錄位置
- 建立資料夾
- path引數是建立 /刪除目錄的位置
- mode引數是Unix平台使用的
- 刪除目錄 (資料夾需空的才能刪除)
- 取得檔案大小
範例:
In[24]:
os.path.getsize('C:\\Qt\\Qt5.5.1\\InstallationLog.txt')
Out[24]: 249342 #單位為byte
- 取得檔案的建立 日期
- 取得檔案的修改日期
- 取得檔案的存取日期
範例:
In[25]:
os.path.getctime('C:\\Qt\\Qt5.5.1\\InstallationLog.txt')
Out[25]: 1450242104.5591452 #與1970年01月01號00時00分00秒的秒差值
- 判斷傳入的path引數是否為檔案
- 判斷傳入的path引數是否為目錄
random Module -- Generate pseudo-random numbers
random.random()
- 隨機產生0.0<=x<1.0之間的數字
範例:
In[33]:
random.random()
Out[33]:
0.6161858237684328
- 隨機產生num1<=x<num2的數字
範例:
In[34]:
random.uniform(10,20)
Out[34]:
14.398467660358468
- 產生一個1到10的數字
範例:
In[35]:
random.randint(5,10)
Out[35]:
8
- 產生一個0到100的數字
範例:
In[36]:
random.randrange(0,101)
Out[36]:
66
- 將傳入的內容隨機取得
範例:
In[38]:
members = ['Cash','Mary','Tom','Victor','Han']
In[39]:
random.choice(members)
Out[39]:
'Tom'
In[40]:
random.choice(members)
Out[40]:
'Tom'
In[41]:
random.choice(members)
Out[41]:
'Tom'
In[42]:
random.choice(members)
Out[42]:
'Victor'
In[43]:
random.choice(members)
Out[43]:
'Cash'
- 將傳入的序列型態資料內的項目順序以隨機順序產生
範例:
In[44]:
members = ['Cash','Mary','Tom','Victor','Han']
In[45]:
random.shuffle(members)
In[46]:
members
Out[46]:
['Victor', 'Mary', 'Cash', 'Han', 'Tom']
- 將傳入的序列項目以指定的長度顯示一個隨機項目值的序列
範例:
In[47]:
members = ['Cash','Mary','Tom','Victor','Han']
In[48]:
random.sample(members,3)
Out[48]:
['Cash', 'Victor', 'Mary']
In[49]:
random.sample(members,3)
Out[49]:
['Victor', 'Cash', 'Han']
In[50]:
random.sample(members,3)
Out[50]:
['Han', 'Mary', 'Victor']
time Module -- Time access and conversions
time.time()
- 取得系統時間
範例:
In[51]:
import time
In[52]:
time.time()
Out[52]: 1463400683.5634313 #單位為 秒.xxxxx
In[53]:
time.time()
Out[53]:
1463400690.88585
- 設定暫停時間
- num = 停頓的秒數
範例:
#倒數十秒
In[68]:
for i in range(10,-1,-1):
... print(i)
... time.sleep(1)
- 取得當地時間
time.struct_time(tm_year, tm_mon, tm_mday, tm_hour,
tm_min, tm_sec, tm_wday, tm_yday_, tm_isdst)
範例1:
In[54]:
time.localtime()
Out[54]:
time.struct_time(tm_year=2016, tm_mon=5, tm_mday=16, tm_hour=20, tm_min=12,
tm_sec=47, tm_wday=0, tm_yday=137, tm_isdst=0)
範例2:
In[55]:
t = time.localtime()
In[56]:
t.tm_hour
Out[56]:
20
In[57]:
t.tm_mon
Out[57]:
5
time.gmtime()
sys.argv[0]
帶入參數以list形式儲存
sys.builtin_module_names
比較高階的應用層,提供數個針對檔案操作的功能
shutil = shell + until
- 取得UTC時間
- 設定時間格式以字串形式輸出
範例:
In[63]:
time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
Out[63]:
'2016-05-16 20:20:22'
sys Module -- System-specific parameters and functions
https://docs.python.org/3/library/sys.html#module-syssys.argv[0]
- 會回傳此程式檔案的位置與名稱
帶入參數以list形式儲存
sys.builtin_module_names
- 回傳Python程式語言內所有內置模組名稱
- 得知目前已經載入的模組
- 取得目前作業系統的版本
- 宣告sys.exit(0)終止程式
- 回傳目前安裝在系統上的Python版本
- 格式:’(#build_number, build_date, build_time)[compiler]’
- 回傳Python直譯器的C API版本
- 回傳一個tuple型態的值
- (‘主要版本’, ’次要版本’, ’小版本’)
- 回傳的版本數字是註冊在Windows裡的Python版本
- 定義Python搜尋模組的路徑
shutil Module -- High-level file operations
https://docs.python.org/3/library/shutil.html#module-shutil比較高階的應用層,提供數個針對檔案操作的功能
shutil = shell + until
shutil.copytree(src, dst)
- 複製整個目錄,包含目錄內的所有檔案
- 複製檔案
- 移除整個目錄,包含目錄內的所有檔案
- 移動檔案,移動時也可以進行更換檔案名稱
- 複製檔案,會連同檔案屬性一 同複製
- Return r length subsequences of elements from the input iterable.
範例:In[38]: for a in combinations('ABCD',2):
... print(a)
...
Out:
('A', 'B')
('A', 'C')
('A', 'D')
('B', 'C')
('B', 'D')
('C', 'D')
沒有留言:
張貼留言