接上篇,當我們創建了很多類,比如 圖書館里的藏書,分社會科學類,藝術類、生活類、農業類、工業類等,而工業類又分為輕工業、重工業、信息工業,然後再細分。當分的越來越細時,程式就會越來越大。如何管理,便成了程式開發過程中一個重要的環節。於是可以按照圖書館分類管理的思想,對程式代碼進行管理。 將一個應用程 ...
接上篇,當我們創建了很多類,比如 圖書館里的藏書,分社會科學類,藝術類、生活類、農業類、工業類等,而工業類又分為輕工業、重工業、信息工業,然後再細分。當分的越來越細時,程式就會越來越大。如何管理,便成了程式開發過程中一個重要的環節。於是可以按照圖書館分類管理的思想,對程式代碼進行管理。
將一個應用程式,按照代碼的功能或其他標準,分別放入不同的文件。這些文件就是不同的模塊。這樣方便管理和維護代碼。
同樣,也可以將不同的功能代碼放到不同的文件夾中,並讓他們能相互引用,這就是包。
模塊和包都是複雜程式的一種組織方式。
一 、模塊
python中模塊是包含函數或類的python程式,以".py"為尾碼名,用作模塊的python程式與其他程式並無多大區別。
要使用模塊,python中有三個方法可以導入模塊或模塊中的函數
import 模塊名 這是將整個模塊全部導入,使用函數時,先用模塊名+"."+函數名,如 import numpy numpy.mat()
import 模塊名 as new_name(給模塊取個新名字) 這是給導入模塊重新命名,使用函數,用新名+“.”+函數名 如 import numpy as np np.mat()
from 模塊名 import 函數名 這個是直接導入函數,在該模塊中,只能使用該函數,如 from numpy import mat 則在該模塊下,numpy的其他函數不能被使用,只能用mat()函數。 當然,如果用“*”代替函數名,則numpy的所有函數均可使用。
下麵通過最常見的math函數來觀察一下。
import math from math import sqrt import math as calc print("調用math.sqrt:\t",math.sqrt(3)) print("直接調用sqrt:\t",sqrt(5)) print("新函數名調用sqrt:\t",calc.sqrt(4))
運行結果:
上述例子,是直接導入了系統現在有的模塊或包,那麼自己應該怎麼處理呢?自己編寫模塊和平時寫程式一樣,既可以是解決某個問題的獨立程式,也可以是幾個函數構成(如math函數),模塊名就是代碼保存的文件名。
前面例子中,有一個Calc的類,裡面有加、減、乘、除四則運算,那可不可以把它設置為一個模塊呢?上文說過,幾個函數也可以構成模塊。那我們把定義類的“class Calc:”去掉試,就讓這四個函數在一起(註意,把四個函數中的self去掉),實例化等放到另一個模塊中。
修改名稱為clac.py,其中代碼如下:
def calcadd(x,y): return x+y def calcreduce(x,y): return x-y def calcmultiply(x,y): return x*y def calcdeviate(x,y): return x/y
上述導入math模塊的文件,命名為newtest.py,將原列印加、減、乘、除的四個語句,拷貝過來並修改,代碼如下:
import math from math import sqrt import math as calcper import calc as new_calc print("調用math.sqrt:\t",math.sqrt(3)) #前一例子調用math模塊 print("直接調用sqrt:\t",sqrt(5)) print("新函數名調用sqrt:\t",calcper.sqrt(4)) print("相加的結果是:%s"%new_calc.calcadd(20,50)) print("相乘的結果是:%s"%new_calc.calcmultiply(23,50)) print("相除的結果是:%s"%new_calc.calcdeviate(30,50)) print("相減的結果是:%s"%new_calc.calcreduce(20,50))
運行結果:
重點註意一下:calc.py和newtest.py必須在同一目錄下。模塊的其他見https://www.cnblogs.com/codingchen/p/16157832.html 中的介紹。
二、部分常見模塊功能
1、math和random
前述導入的math模塊,主要是數學函數,比如常見的對數函數、三角函數、反三角函數等,還有一些常量,如圓周率pi、自然數e等
random則包含了常見的隨機函數,如random、randint ,按概率生成的函數如gauss(),還有像shuffle(亂序表),choice(隨機選擇)等。
對上述代碼進行適當修改,完成演示:將上述代碼中固定的數字,用隨機數,choice等完成。在calc.py文件不變的情況下,將newtest.py文件進行修改如下:
import calc as new_calc import math import random m=float(random.random()) n=float(random.choice([5,7,9,13,15,11,13])) #註意choice()中用的是[1,2,3],而不是(1,2,3) print("%s"%m) print("%s"%n) print("相加的結果是:%s"%new_calc.calcadd(m,n)) print("相乘的結果是:%s"%new_calc.calcmultiply(m,n)) print("相除的結果是:%s"%new_calc.calcdeviate(n,m)) #m、n位置不一樣 print("相減的結果是:%s"%new_calc.calcreduce(m,n)) u=math.sin(m) v=math.cos(n) print("%s"%u) print("%s"%v) print("相加的結果是:%s"%new_calc.calcadd(u,v)) print("相乘的結果是:%s"%new_calc.calcmultiply(u,n)) #n沒有變化 print("相除的結果是:%s"%new_calc.calcdeviate(n,u)) print("相減的結果是:%s"%new_calc.calcreduce(v,n)) #n沒有變化
註意一下:choice()的用法,choice()中用的是[1,2,3]的序列,而不是(1,2,3)。運行結果如下:
2)日期與時間類
此類標準庫有calendar 、datetime和time三個模塊,通過下麵的例子,先瞭解一下datetime 和time這兩個模塊,代碼如下(仔細閱讀一下註釋):
import datetime import time import calendar print(datetime.datetime.now()) print(time.time()) aa = datetime.datetime.now() #定義一個aa,將當前時間賦值給aa bb = datetime.datetime(2023,9,23,21,56,35,120129) #定義一個bb,將當前時間賦值給bb cc = aa-bb #將aa-bb的差賦值給cc print("%s\n"%cc) #列印出cc aaa=datetime.timedelta(days=5,hours=10) bbb=datetime.timedelta(hours=6.5) ccc=aaa+bbb print("%s\n"%ccc.days) print("%s\n"%ccc.seconds) print("%s\n"%ccc.total_seconds()) print(aa+datetime.timedelta(minutes=20)) print("\n") #閏年的處理,datetime會自動處理閏年 a=datetime.datetime(2020,3,1) b=datetime.datetime(2020,2,28) print("%s\n"%(a-b).days) ab=datetime.datetime(2023,3,1) ba=datetime.datetime(2023,2,28) print("%s"%(ab-ba).days)
運行結果如下:
翻譯
搜索
複製