函數重構
- 函數重構
- pycharm函數重構步驟
- 函數重構練習
函數重構
函數重構是指對現有函數進行修改和優化的過程。重構的目的是改善代碼的可讀性、可維護性和靈活性,同時保持其功能不變。函數重構通常包括以下步驟:
-
理解函數的功能和目的。了解函數的作用和期望結果,確定重構的目標。
-
檢查函數的代碼質量。查看函數的代碼是否清晰、簡潔、可讀,有無可改進之處。
-
提取重復的代碼。如果函數中有重復的代碼塊,可以將其提取為單獨的函數或方法,避免重復編寫代碼。
-
簡化函數邏輯。如果函數的邏輯過于復雜,可以將其拆分成多個較小的函數,每個函數只負責一部分邏輯。
-
優化函數參數。檢查函數的參數是否過多或過少,是否有不必要的參數,可以考慮重新設計參數,使函數的接口更清晰和簡潔。
-
修改函數的命名。函數的命名應該準確地描述函數的功能和作用,可以根據函數的具體功能和語義重新命名。
-
添加注釋和文檔。為函數添加合適的注釋和文檔,使其他開發人員能夠更容易地理解和使用函數。
-
運行測試用例。確保重構后的函數仍然能夠正確地完成其功能,并通過運行測試用例進行驗證。
通過函數重構,可以改善代碼的質量和可維護性,提高開發效率和代碼的可讀性。同時,重構還可以幫助發現和修復代碼中的潛在問題和bug。函數重構是指對現有函數進行修改和優化的過程。重構的目的是改善代碼的可讀性、可維護性和靈活性,同時保持其功能不變。函數重構通常包括以下步驟:
-
理解函數的功能和目的。了解函數的作用和期望結果,確定重構的目標。
-
檢查函數的代碼質量。查看函數的代碼是否清晰、簡潔、可讀,有無可改進之處。
-
提取重復的代碼。如果函數中有重復的代碼塊,可以將其提取為單獨的函數或方法,避免重復編寫代碼。
-
簡化函數邏輯。如果函數的邏輯過于復雜,可以將其拆分成多個較小的函數,每個函數只負責一部分邏輯。
-
優化函數參數。檢查函數的參數是否過多或過少,是否有不必要的參數,可以考慮重新設計參數,使函數的接口更清晰和簡潔。
-
修改函數的命名。函數的命名應該準確地描述函數的功能和作用,可以根據函數的具體功能和語義重新命名。
-
添加注釋和文檔。為函數添加合適的注釋和文檔,使其他開發人員能夠更容易地理解和使用函數。
-
運行測試用例。確保重構后的函數仍然能夠正確地完成其功能,并通過運行測試用例進行驗證。
通過函數重構,可以改善代碼的質量和可維護性,提高開發效率和代碼的可讀性。同時,重構還可以幫助發現和修復代碼中的潛在問題和bug。
pycharm函數重構步驟
- 選擇要重構的函數,在PyCharm中打開該函數所在的文件。
- 鼠標右鍵點擊函數名稱或者函數體,選擇"Refactor",然后選擇"Extract"。
- 在彈出的菜單中選擇"Function",然后輸入新的函數名稱。
- 在彈出的對話框中,選擇要提取的代碼塊,包括函數參數和函數體內的代碼。
- 點擊"OK"按鈕,PyCharm將會自動在當前文件中創建一個新的函數,并將選中的代碼塊移動到新的函數中。
- 在原來的位置上,會生成一個函數調用語句,調用新創建的函數。
- 檢查新創建的函數是否正確,如果需要修改參數或者函數體內的代碼,可以在新創建的函數中進行修改。
- 如果需要修改函數調用處的參數,可以在原來的位置上修改函數調用語句。
- 確保重構后的代碼沒有錯誤,并且與之前的代碼功能一致。
- 提交代碼變更,完成函數重構。
函數重構練習
學生信息管理系統是一個控制臺應用,它使用 Python 編寫,包含以下功能:
-
查詢所有信息:通過
select_all
函數實現,它遍歷學生列表并打印每個學生的學號、姓名、年齡和分數。 -
新增信息:由
add_one
函數負責,提示用戶輸入學生的學號、姓名、年齡和分數,然后將這些信息存儲在一個字典中,并檢查學號是否已經存在于學生列表中,以避免重復。 -
修改信息:
update_one
函數用于根據學號修改學生的分數。如果學號存在,則更新其分數;否則,給出錯誤提示。 -
刪除信息:通過
delete_one
函數,根據學號刪除學生信息。如果學號不存在,給出錯誤提示。 -
退出:
exit_system
函數用于安全地關閉程序。 -
主菜單:
data_manager
函數作為系統的主入口點,顯示菜單供用戶選擇,并根據用戶的選擇調用相應的函數。此外,它還處理了非法輸入的情況。
系統使用一個名為 stu_dic
的列表來存儲學生信息,其中每個學生的信息都保存在一個字典中。
# 寫一個控制臺版的學生信息管理系統
# 菜單的輸出print
# 菜單
# 1、查詢所有信息
# 2、新增信息
# 3、修改信息
# 4、刪除信息
# 5、退出
# 菜單的選擇input
# 當輸入1時,遍歷stu
# 當輸入2時,輸入需要新增的信息(學號、姓名、年齡、得分),將數據插入到stu
# 3時,根據id修改得分
# 4時,根據id刪除該條信息
# 5,結束
# 除了5以外的任意功能操作結束后需要返回主菜單界面
# 定義一個學生信息列表,每個學生信息包括學號、姓名、年齡和分數
import sys# 初始化學生信息列表
d1 = {"id": 1, "name": "zl", "age": 20, "score": 100}
d2 = {"id": 2, "name": "jwj", "age": 21, "score": 95}
d3 = {"id": 3, "name": "zff", "age": 24, "score": 90}
stu_dic = [d1, d2, d3]# 打印所有學生信息
def select_all(stu):"""打印學生列表中的所有學生信息。參數:stu -- 學生信息列表。"""print("學號\t姓名\t年齡\t分數")for i in stu:for j in i.values():print(j, end="\t")print()# 根據姓名查詢并打印學生信息
def select_one(stu):"""根據輸入的姓名查詢并打印學生信息。參數:stu -- 學生信息列表。"""temp_name = input("請輸入要查詢的學生姓名:")for i in stu:if i["name"] == temp_name:print("學號\t姓名\t年齡\t分數")for j in i.values():print(j, end="\t")print()breakelse:print("查無此人")# 添加學生信息
def add_one(stu):"""添加學生信息到列表中。參數:stu -- 學生信息列表。"""while True:print("請輸入學號、姓名、年齡、分數")# 輸入并構建一個新的學生信息temp_id = input("學號:")temp_name = input("姓名:")temp_age = input("年齡:")temp_score = input("分數:")if temp_id.isdigit() and temp_age.isdigit() and temp_score.isdigit():temp_info = {"id": int(temp_id),"name": temp_name,"age": int(temp_age),"score": int(temp_score),}if temp_info["id"] in [i["id"] for i in stu]:print("學號已存在,請重新輸入")breakelse:# 將新學生信息添加到學生信息列表中stu.append(temp_info)else:print("輸入錯誤,請重新輸入")# 詢問用戶是否繼續添加continue_check = input("是否繼續添加?y/n:")# 如果用戶不打算繼續添加,則退出循環if continue_check == "n":break# 修改學生信息
def update_one(stu):"""根據輸入的學號修改學生信息中的分數。參數:stu -- 學生信息列表。"""# 修改學生分數temp_id = input("請輸入要修改的學號:")temp_score = input("請輸入修改后的分數:")if temp_id.isdigit() and temp_score.isdigit():temp_id = int(temp_id)temp_score = int(temp_score)for i in stu:if i["id"] == temp_id:# 找到對應學號的學生,修改其分數i["score"] = temp_scoreprint("修改成功")breakelse:print("學號不存在")else:print("輸入錯誤,請重新輸入")# 刪除學生信息
def delete_one(stu):"""根據輸入的學號刪除學生信息。參數:stu -- 學生信息列表。"""# 刪除學生信息temp_id = input("請輸入要刪除的學號:")if temp_id.isdigit():temp_id = int(temp_id)for i in stu:if i["id"] == temp_id:# 找到對應學號的學生,從列表中刪除stu.remove(i)print("刪除成功")breakelse:print("學號不存在")else:print("輸入錯誤,請重新輸入")# 退出系統
def exit_system():"""退出學生信息管理系統。"""print("退出系統成功")sys.exit()# 主菜單函數,提供學生信息管理的各種選項
def data_manager(stu):"""學生信息管理系統的主菜單函數。參數:stu -- 學生信息列表。"""while True:print("""# 菜單
# 1、查詢信息
# 2、新增信息
# 3、修改分數
# 4、刪除信息
# 5、退出系統""")# 獲取用戶的選擇number = int(input("請輸入序號:"))# 根據用戶的選擇執行不同的操作if number == 1:# 查詢所有學生信息print("""1. 查詢所有學生信息2. 查詢單個學生信息
""")select_number = input("請輸入序號:")if select_number.isdigit():select_number = int(select_number)if select_number == 1:select_all(stu)elif select_number == 2:select_one(stu)else:print("輸入錯誤,請重新輸入")else:print("輸入錯誤,請重新輸入")elif number == 2:add_one(stu)elif number == 3:update_one(stu)elif number == 4:delete_one(stu)elif number == 5:# 退出系統exit_system()else:# 如果用戶輸入了無效的選項print("輸入錯誤,請重新輸入")# 啟動學生信息管理系統主菜單
data_manager(stu_dic)