包及簡單模組
包是一種通過使用.模組名來組織Python模組名稱空間的方式
包就是一個包含有__init__.py檔案的資料夾,所以我們建立包的目的就是為了用資料夾將檔案/模組組織起來
在Python3中,即使包下沒有__init__檔案,import包仍然不會報錯,而在Python2中,包下一定要有該檔案否則報錯
2.建立包的目的不是為了執行而是被匯入,包只是模組的一種形式,包的本質就是一種模組
包的本質是一個資料夾,功能越多,模組越多,我們需要資料夾將模組組織起來,提高程式的結構性和可維護性
單獨匯入包名稱時不會匯入包中所有包含的所有子模組
絕對匯入,以執行檔案的路徑為起始點開始匯入稱之為絕對匯入
優點:執行檔案與被匯入的模組都可以使用
缺點:所有匯入都是以sys.path為起始點匯入麻煩
相對匯入:以.為起始代替路徑只能在一個包中使用不能用於不同目錄中
優點:匯入更加簡單
缺點:只能在匯入包中的模組才能使用
1.什麼是序列化
序列化就是將記憶體中的資料型別轉成另外一種格式
即字典----->序列化------>其他的格式--------------->存到硬碟
硬碟--------->讀取---------->其他格式-------------->反序列化---------------->字典
2.為什麼要序列化?
持久儲存程式的執行狀態
資料的跨平臺互動
2.如何序列化?
json:
優點:這種格式是一種通用的格式,所有的程式語言都能識別
缺點:不能是被所有python型別
json格式不能識別單引號
piclke:
優點:能識別所有Python型別
缺點;只能被Python這門語言識別
json使用dumps()方法將資料序列化引數為序列化物件,
也可以使用dump()方法直接寫入檔案並序列化,需要的引數是序列化物件及檔案物件
讀取json序列化的字元,可以使用load()方法與loads()方法
其中load()方法引數為檔案物件,loads()引數型別字串
pickle可以識別python型別
方法與json相同,不同點是讀寫都是bytes型別
時間分為三種模式:
1.時間戳
time.time()方法可以得到
2.格式化的字串
time.strftime('%Y-%m-%d %H :%M;%s %p')
3.結構化的時間物件:
使用time.localtime()
時間轉換
時間戳=====>struct_time=========>格式化的字串
1 struct_time=time.localtime(time.time()) 2 res=time.strftime('%Y-%m-%d',struct_time)
格式化的字串======>struct_time=======>時間戳
1 struct_time=time.strptime('2017-03-11','%Y-%m-%d') 2 res=mktime(struct_time))
1 localtime() 2 將一個時間戳轉換為當前時區的struct_time,引數未提供時預設為當前時間 3 gmtime()類似於localtime()將時間戳轉換為0時區 4 mktime()將一個struct_time轉化為時間戳 5 time()返回當前時間戳 6 strftime('%Y-%m-%d %H-%M%S')格式化時間 7 time.strptime(string[, format]) 8 把一個格式化時間字串轉化為struct_time。實際上它和strftime()是逆操作。 9 print(time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X')) 10 time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=37, tm_sec=6, 11 tm_wday=3, tm_yday=125, tm_isdst=-1) 12 在這個函式中,format預設為:"%a %b %d %H:%M:%S %Y"。 13 asctime([t]) : 把一個表示時間的元組或者struct_time表示為這種形式:'Sun Jun 20 23:21:05 1993'。 14 如果沒有引數,將會將time.localtime()作為引數傳入。 15 print(time.asctime())#Sun Sep 11 00:43:43 2016 16 ctime([secs]) : 把一個時間戳(按秒計算的浮點數)轉化為time.asctime()的形式。如果引數未給或者為 17 None的時候,將會預設time.time()為引數。它的作用相當於time.asctime(time.localtime(secs))。 18 print(time.ctime()) # Sun Sep 11 00:46:38 2016 19 print(time.ctime(time.time())) # Sun Sep 11 00:46:38 2016 20 import datetime萬惡的十五字
1 import random 2 3 print(random.random())#(0,1)----float 大於0且小於1之間的小數 4 print(random.randint(1,3)) #[1,3] 大於等於1且小於等於3之間的整數 5 print(random.randrange(1,3)) #[1,3) 大於等於1且小於3之間的整數 6 print(random.choice([1,'23',[4,5]]))#1或者23或者[4,5] 7 print(random.sample([1,'23',[4,5]],2))#列表元素任意2個組合 8 print(random.uniform(1,3))#大於1小於3的小數,如1.927109612082716 9 item=[1,3,5,7,9] 10 random.shuffle(item) #打亂item的順序,相當於"洗牌" 11 print(item) 12 複製程式碼 13 import random 14 def make_code(n): 15 res='' 16 for i in range(n): 17 s1=chr(random.randint(65,90)) 18 s2=str(random.randint(0,9)) 19 res+=random.choice([s1,s2]) 20 return res 21 22 print(make_code(9))random
1 import random 2 3 print(random.random())#(0,1)----float 大於0且小於1之間的小數 4 5 print(random.randint(1,3)) #[1,3] 大於等於1且小於等於3之間的整數 6 7 print(random.randrange(1,3)) #[1,3) 大於等於1且小於3之間的整數 8 9 print(random.choice([1,'23',[4,5]]))#1或者23或者[4,5] 10 print(random.sample([1,'23',[4,5]],2))#列表元素任意2個組合 11 12 print(random.uniform(1,3))#大於1小於3的小數,如1.927109612082716 13 14 item=[1,3,5,7,9] 15 random.shuffle(item) #打亂item的順序,相當於"洗牌" 16 print(item) 17 複製程式碼 18 import random 19 def make_code(n): 20 res='' 21 for i in range(n): 22 s1=chr(random.randint(65,90)) 23 s2=str(random.randint(0,9)) 24 res+=random.choice([s1,s2]) 25 return res 26 27 print(make_code(9))這裡什麼都沒有