Python學習第十八篇——低耦合函數設計思想
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學習第十八篇——低耦合函數設計思想