在擼碼過程中,總有很多代碼需要重構,碼一個問候用戶的小例子,加深對代碼重構的印象。
原始代碼:
1 import json 2 3 filename = 'username.json' #定義文件名 4 5 try: 6 with open(filename) as file_object: 7 username = json.load(file_object) #加載存儲的用戶名,如果有的話 8 9 except FileNotFoundError: 10 username = input("what is your name: ") 11 with open(filename,'w') as file_object: #以寫入的方式打開文件filename 12 json.dump(username,file_object) #將username寫入到文件對象中 13 print("We will remember you when you back " +username + "!") #打印問候語 14 15 else: 16 print("Welcome back, " + username + "!") #打印問候語
代碼重構1,將代碼全部封裝到一個函數里面:
1 import json 2 3 '''定義函數,用於代碼封裝''' 4 def greet_user(): 5 filename = 'username.json' 6 try: 7 with open(filename) as file_object: 8 username = json.load(file_object) 9 10 except FileNotFoundError: 11 username = input("What is your name: ") 12 with open(filename,'w') as file_object: 13 json.dump(username,file_object) 14 print("We will remember you when you back, " + username + "!") 15 16 else: 17 print("Welcome back, " + username + "!") 18 19 greet_user() #調用函數問候
代碼重構2,將代碼重構1的函數進一步拆分,讓函數greet_user()不執行那么多任務,我們將獲取存儲的用戶名的代碼寫到另一個get_stored_user()函數中。
1 import json 2 3 4 def get_stored_user(): 5 filename = 'username.json' 6 try: 7 with open(filename) as file_object: 8 username = json.load(file_object) 9 10 except FileNotFoundError: 11 return None 12 13 else: 14 return username 15 16 17 def greet_user(): 18 username = get_stored_user() 19 if username: 20 print("Welcome back " + username + "!") 21 else: 22 username = input("What is your name: ") 23 filename = 'username.json' 24 with open(filename,'w') as file_object: 25 json.dump(username,file_object) 26 print("We will remember you when you back, " + username + "!") 27 28 greet_user() #調用函數問候
代碼重構3,由於最終的目的是問候用戶,我們可以將重構2里的代碼進一步拆分,將沒有用戶名的時候提示輸入用戶名的代碼存儲在另外一個函數中。
1 import json 2 3 def get_stored_user(): 4 '''定義函數以獲取存儲了的用戶名''' 5 filename = 'username.json' 6 try: 7 with open(filename) as file_object: 8 username = json.load(file_object) 9 except FileNotFoundError: 10 return None 11 else: 12 return username #返回用戶名 13 14 def get_new_user(): 15 '''定義函數以獲取用戶輸入''' 16 username = input("What is your name: ") 17 filename = 'username.json' 18 with open(filename,'w') as file_object: 19 json.dump(username,file_object) 20 21 return username #返回用戶名 22 23 def greet_user(): 24 '''定義函數問候用戶''' 25 username = get_stored_user() 26 if username: 27 print("Welcome back, " + username + "!") 28 else: 29 username = get_new_user() 30 print("We will remember you when you back, " + username + "!") 31 32 greet_user() #調用函數,打印問候語
代碼重構的意義在於,簡化同一個代碼塊的任務量,讓代碼更容易讀懂。