標籤:span 擴充 pytho 列表 json格式 編碼 ack 完成 函數返回
1 import json 2 2 def greet_user(filename): 3 3 try: 4 4 with open(filename) as f_obj: 5 5 username = json.load(f_obj) 6 6 except FileNotFoundError: 7 7 username = input("what is your name?") 8 8 with open(filename,‘w‘) as f_obj: 9 9 json.dump(username,f_obj)10 10 print("we‘ll remember you when you come back, "+username+"!")11 11 else:12 12 print("hello,"+username+".;")13 13 14 14 greet_user("username.json")
這段代碼1描述了這樣一個功能,開啟“username.json”檔案夾,該檔案夾中儲存了使用者姓名,如果不存在該檔案夾,可以建立該檔案夾,並且這裡建立了一個函數來描述這件事情:
該程式碼片段實際上完成了兩個功能:1 讀取"username.json"檔案夾。2 建立“username.json”檔案。
實際上,在代碼設計的時候,我們通常應該具有這樣的思想:將我們要做的工作,劃分為具體的代碼函數塊,使得函數看起來更加簡潔,擴充性也越強,在編寫程式的時候,我們應該具備這樣的意識。
下面,將上述的的代碼拆成兩部分功能,代碼2如下:
1 import json
2 def get_stored_username():
3 filename = "username.json"
4 try:
5 with open(filename) as f_obj:
6 username = json.load(f_obj)
7 except FileNotFoundError:
8 return None
9 else:
10 return username
11
12 def greet_user():
13 username = get_stored_username()
14 if username:
15 print("hello,"+username+".")
16 else:
17 username = input("what is your name?")
18 filename = "username.json"
19 with open(filename,"w") as f_obj:
20 json.dump(username,f_obj)
21 print("we‘ll remember you when you come back, "+username+"!")
22 greet_user()
上述程式碼完成了函數1的功能。但是函數的耦合程度降低了,因此,寫代碼的時候,需要注意自己的代碼風格,盡量養成低耦合代碼的習慣。
在此,總結一下上述代碼中的一些知識點:
1 json模組非常好用,首先明確一個重要的概念:json是一種資料交換格式,即本質是資料格式的轉換, 這種格式方便我們資訊。
2 json.dump()用於將Python對象編碼成json字串
3 json.load()將json格式轉化成python對象
將上述2抽象一下,變成我們將我們Python中的比如字串,整型數,字典,列表,這些儲存在一個檔案在.json的檔案類型中
將3抽象一下,變成,將.json類型的檔案載入成字串,整型數等等。
如果不考慮資料的本質,我們可以認為,這就是簡單的寫檔案和讀檔案的操作
4 代碼2中的第八的return None,None是一個關鍵字(姑且這麼叫),我們再看代碼2中第十四行代碼 if username,可以發現,可以感覺username,None來判斷邏輯值,實際上:
python 中,None,空列表[],空字典{},空元組(),0都一系列代碼空和無的對象都會被轉化成Flase,其他表示1,真,有的對象被轉化成True
5 代碼2中的第10行代碼,表示Python中的函數傳回值類型可以是任意你想要的值,包括數值,字串,列表,字典等,因此在寫函數的時候,要注意靈活使用。
Python學習第十八篇——低耦合函數設計思想