1. 什么是模塊
模塊就是一系列功能的集合體
模塊分為四個通用的類別:
1 使用python編寫的.py文件(*****)
2 已被編譯為共享庫或DLL的C或C++擴展
3 把一系列模塊組織到一起的文件夾(注:文件夾下有一個__init__.py文件,該文件夾稱之為包)(*****)
4 使用C編寫并鏈接到python解釋器的內置模塊
模塊有三種來源:
1. 內置模塊
2. 第三方模塊
3. 自定義模塊
2. 為何要用模塊
1. 使用內置的或者第三方的模塊的好處是:拿來主義,極大提升開發效率
2. 使用自定義的模塊的好吃是:將程序各部分組件共用的功能提取取出放到一個模塊里,其他的組件通過導入的方式使用該模塊,該模塊即自定義的模塊,好處是可以減少代碼冗余
3. 如何用模塊
import spam
首次導入模塊會發生三件事
1.會產生一個模塊的名稱空間
2.執行spam.py文件的內容,將產生的名字丟到模塊的名稱空間
3.在當前執行文件中拿到一個名字spam,該名字指向模塊的名稱空間
# 使用
# print(money)
# print(spam.money)
# print(spam.read1)
# print(spam.read2)
# print(spam.change)
# 補充:重命名模塊名
# import spam as sm
# print(sm.money)
from spam import money,read1,read2,change
首次導入模塊會發生三件事
1. 會產生一個模塊的名稱空間
2. 執行spam.py文件的內容,將產生的名字丟到模塊的名稱空間里
3. 在當前執行文件中拿到名字read1,該名字指向模塊的名稱空間中的read1的值的地址
#import總結
#優點:指名道姓地問某一個名稱空間要名字,不會與當前執行文件名稱空間中的名字沖突
#缺點:引用模塊中的名字必須加前綴(模塊名.),使用不夠簡潔
#from...import總結
#優點:引用模塊中的名字不用加前綴(模塊名.),使用更為簡潔
#缺點:容易與當前執行文件名稱空間中的名字沖突
查找模塊路徑的優先級
1.內存
2.內置模塊
3.sys.path(是以執行文件為準的)
如何區分python文件的兩種用途
def f1():
print('f1')
def f2():
print('f2')
if __name__ == '__main__':
f1()
f2()
# print(__name__)
# 當文件被當作執行文件執行時__name__的值為__main__
# 當文件被當作模塊導入時__name__的值為模塊名mmm
json 與 pickle模塊
1. 什么是序列化
序列化就是將內存中的數據類型轉成另外一種格式
即:
字典---------序列化--------->其他的格式--------------->存到硬盤
硬盤---讀取---->其他格式----------反序列化-------->字典
2. 為什么要序列化
1. 持久保存程序的運行狀態
2. 數據的跨平臺交互
3. 如何序列化
json:
優點: 這種格式是一種通用的格式,所有編程語言都能識別
缺點: 不能識別所有python類型
強調:json格式不能識別單引號
pickle
優點: 能識別所有python類型
缺點: 只能被python這門編程語言識別
![]()
dic={'k1':True,'k2':10,'k3':'egon','k4':'你好啊',}
###json
import json
##序列化
dic_json=json.dumps(dic)
print(dic_json,type(dic_json))
##持久化
with open('a.json','wt',encoding='utf8') as f:
f.write(dic_json)
##序列化+持久化
with open ('a.json',mode='wt',encoding='utf-8') as f:
json.dump(dic,f)
##從文件中讀取json格式化的字符
with open ('a.json','rt',encoding='utf8') as f:
dic_json=f.read()
#反序列化
dic=json.loads(dic_json)
print(dic,dic['k1'])
#讀取文件內容+反序列化
dic=json.loda(f)
print(dic['k1'])
json
import pcikle
dic={'k1':True,'k2':10,'k3':'egon','k4':'你好啊',}
dic_pkl=pickle.dumps(dic)
print(dic_pkl)
with open('b.pkl','wb') as f:
f.write(dic_pkl)
with open('b.pkl','rb') as f:
s_pkl=f.read()
s=pickle.loads(s_pkl)
#===========>2 pickle.dump與pickle.load
with open('c.pkl','wb') as f:
pickle.dump(dic,f)
with open('c.pkl',mode='rb') as f:
dic=pickle.load(f)
time與datatime模塊
1.時間戳
print(time.time())
2.格式化的字符
print(time.strftime('%Y-%m-%d %H:%M:%S %p'))
3.結構化的時間對象
print(time.localtime())
print(time.localtime().tm.hour)
print(time.localtime().tm.wday)
#print(time.gmtime())
# 時間轉換
# 時間戳---->struct_time------->格式化的字符串
# struct_time=time.localtime(123123)
# print(struct_time)
# print(time.strftime('%Y-%m-%d',struct_time))
# 格式化的字符串---->struct_time------->時間戳
# struct_time=time.strptime('2017-03-11','%Y-%m-%d')
# print(struct_time)
# print(time.mktime(struct_time))
import datatime
print(datetime.datetime.now())
print(datetime.datetime.fromtimestamp(28318322))#轉換時間戳
print(datetime.datetime.now() + datetime.timedelta(days=3))
print(datetime.datetime.now() - datetime.timedelta(days=3))
print(datetime.datetime.now() + datetime.timedelta(days=-3))
print(datetime.datetime.now() + datetime.timedelta(days=3,hours=3))
random模塊
print(random.random())#隨機0-1的小數
print(random.randint(1,3))#1-3的整數
print(random.randrange(1,3))#1-3的整數,顧頭不顧尾
print(random.uniform(1,3))#1-3的小數
print(random.choice([1,'a','c']))
print(random.sample([1,'a','c'],2))#選其中兩個元素
item=[1,3,5,7,9]
random.shuffle(item)
print(item)
![]()
def make_code(max_size=5):
res=''
for i in range(max_size)
num=str(random.randint(0,9))
alp=chr(random.randint(65,90))
res+=random.choice([num,alp])
return res
print(make_code())
隨機驗證碼生成