1. 程式人生 > >包及簡單模組

包及簡單模組

包是一種通過使用.模組名來組織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))
這裡什麼都沒有