首页 > 编程语言 >【python】函数重构

【python】函数重构

时间:2024-07-12 17:00:26浏览次数:19  
标签:重构 函数 temp python 学生 stu print id

函数重构

函数重构

函数重构是指对现有函数进行修改和优化的过程。重构的目的是改善代码的可读性、可维护性和灵活性,同时保持其功能不变。函数重构通常包括以下步骤:

  1. 理解函数的功能和目的。了解函数的作用和期望结果,确定重构的目标。

  2. 检查函数的代码质量。查看函数的代码是否清晰、简洁、可读,有无可改进之处。

  3. 提取重复的代码。如果函数中有重复的代码块,可以将其提取为单独的函数或方法,避免重复编写代码。

  4. 简化函数逻辑。如果函数的逻辑过于复杂,可以将其拆分成多个较小的函数,每个函数只负责一部分逻辑。

  5. 优化函数参数。检查函数的参数是否过多或过少,是否有不必要的参数,可以考虑重新设计参数,使函数的接口更清晰和简洁。

  6. 修改函数的命名。函数的命名应该准确地描述函数的功能和作用,可以根据函数的具体功能和语义重新命名。

  7. 添加注释和文档。为函数添加合适的注释和文档,使其他开发人员能够更容易地理解和使用函数。

  8. 运行测试用例。确保重构后的函数仍然能够正确地完成其功能,并通过运行测试用例进行验证。

通过函数重构,可以改善代码的质量和可维护性,提高开发效率和代码的可读性。同时,重构还可以帮助发现和修复代码中的潜在问题和bug。函数重构是指对现有函数进行修改和优化的过程。重构的目的是改善代码的可读性、可维护性和灵活性,同时保持其功能不变。函数重构通常包括以下步骤:

  1. 理解函数的功能和目的。了解函数的作用和期望结果,确定重构的目标。

  2. 检查函数的代码质量。查看函数的代码是否清晰、简洁、可读,有无可改进之处。

  3. 提取重复的代码。如果函数中有重复的代码块,可以将其提取为单独的函数或方法,避免重复编写代码。

  4. 简化函数逻辑。如果函数的逻辑过于复杂,可以将其拆分成多个较小的函数,每个函数只负责一部分逻辑。

  5. 优化函数参数。检查函数的参数是否过多或过少,是否有不必要的参数,可以考虑重新设计参数,使函数的接口更清晰和简洁。

  6. 修改函数的命名。函数的命名应该准确地描述函数的功能和作用,可以根据函数的具体功能和语义重新命名。

  7. 添加注释和文档。为函数添加合适的注释和文档,使其他开发人员能够更容易地理解和使用函数。

  8. 运行测试用例。确保重构后的函数仍然能够正确地完成其功能,并通过运行测试用例进行验证。

通过函数重构,可以改善代码的质量和可维护性,提高开发效率和代码的可读性。同时,重构还可以帮助发现和修复代码中的潜在问题和bug。

pycharm函数重构步骤

  1. 选择要重构的函数,在PyCharm中打开该函数所在的文件。
  2. 鼠标右键点击函数名称或者函数体,选择"Refactor",然后选择"Extract"。
  3. 在弹出的菜单中选择"Function",然后输入新的函数名称。
  4. 在弹出的对话框中,选择要提取的代码块,包括函数参数和函数体内的代码。
  5. 点击"OK"按钮,PyCharm将会自动在当前文件中创建一个新的函数,并将选中的代码块移动到新的函数中。
  6. 在原来的位置上,会生成一个函数调用语句,调用新创建的函数。
  7. 检查新创建的函数是否正确,如果需要修改参数或者函数体内的代码,可以在新创建的函数中进行修改。
  8. 如果需要修改函数调用处的参数,可以在原来的位置上修改函数调用语句。
  9. 确保重构后的代码没有错误,并且与之前的代码功能一致。
  10. 提交代码变更,完成函数重构。

函数重构练习

学生信息管理系统是一个控制台应用,它使用 Python 编写,包含以下功能:

  1. 查询所有信息:通过 select_all 函数实现,它遍历学生列表并打印每个学生的学号、姓名、年龄和分数。

  2. 新增信息:由 add_one 函数负责,提示用户输入学生的学号、姓名、年龄和分数,然后将这些信息存储在一个字典中,并检查学号是否已经存在于学生列表中,以避免重复。

  3. 修改信息update_one 函数用于根据学号修改学生的分数。如果学号存在,则更新其分数;否则,给出错误提示。

  4. 删除信息:通过 delete_one 函数,根据学号删除学生信息。如果学号不存在,给出错误提示。

  5. 退出exit_system 函数用于安全地关闭程序。

  6. 主菜单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()
            break
    else:
        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("学号已存在,请重新输入")
                break
            else:
                # 将新学生信息添加到学生信息列表中
                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_score
                print("修改成功")
                break
        else:
            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("删除成功")
                break
            else:
                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)

标签:重构,函数,temp,python,学生,stu,print,id
From: https://blog.csdn.net/qq_18296979/article/details/140383611

相关文章

  • 使用Python配合OpenCV,非常简洁的来识别出银行卡号
        Opencv(OpenSourceComputerVisionLibrary)是一个基于开源发行的跨平台计算机视觉库。OpenCV用C++语言编写,它具有C++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和MacOS。本篇是使用python配合opencv来做图片识别,以识别银行卡上的卡号为例。   安装......
  • Python-pptx学习随笔
    引言++最近有用到做自动化ppt相关的功能,简单记录一下实现过程的部分操作。++0pptx的结构pptx的存储本质上是一颗树flowchartLRpptx-->slides-->shapes-->组内shapespptx-->幻灯片-->模块形状-->复合形状内部的形状1相关操作1.1创建一个pptx类fr......
  • python 内置高級函數盤點
    1. map(function,iterable,...)map()函数接受一个函数和一个可迭代对象作为参数,将函数应用于可迭代对象的每个元素,并返回一个包含结果的迭代器#将列表中的每个元素加1numbers=[1,2,3,4,5]result=map(lambdax:x+1,numbers)print(list(result))#输出[2,3......
  • Lua 中的可变长函数
    可变长函数Lua中的可变长函数的参数用...来表示(3个.)在函数内部有一个特殊的内置变量arg其格式如下arg={1,"Hello",true,n=3}--functionmakeVarStr(...)toseeprint_Table.luafunctionprintMultiArg(...) print("...="..makeVarStr(arg))end......
  • 发布用flask框架开发的python后端程序到windows服务器
    flask框架开发的python后端程序开发好了后,怎么发布到生产环境呢?以app.run()的方式在生产环境上启动服务,当有异常特别容易退出,而且性能很弱。生产环境下,python常见的web部署搭配是nginx+gunicorn。但是这种搭配只适合在Linux环境下。gunicorn不支持windows环境。如果要搭......
  • 环境部署之在 Linux 服务器上搭建和部署 Python 环境
    背景说明在企业工作中,自动化测试框架落地肯定会集成到Jenkins服务器上做持续集成测试,自动构建以及发送结果到邮箱,实现真正的无人值守测试。不过Jenkins搭建一般都会部署在公司的服务器上,不会在私人电脑里,而服务器大部分都是Linux操作系统的。如果要在Linux上的Jenkins服......
  • 后劲真大,我愿称之为学习python的“圣经”
    很多小伙伴都在学习Python,但是爱看书的找不到适合自己的,这本书可以完美的解决你的问题,还能帮助到很多需要处理数据,做Excel自动方面的。学习数据分析的好处众多,无论是对于个人职业发展还是企业的运营决策都具有重要意义。以下是学习数据分析的主要好处:提高就业竞争力:在信息化......
  • 适用于react、vue菜单格式化工具函数
    场景在一个动态菜单场景中,你向接口获取树形菜单,但最后拿到的树未能达到你的预期,这个时候就需要手写递归重新处理这颗树适用于react、vue菜单格式化工具函数包含功能1.当前路由是否存在返回按钮判断逻辑:只要存在左侧可点击的菜单都不具备返回按钮,其他则具有返回按钮2.错误......
  • python模块之configparser
    大家看我前面的笔记中,介绍过了专门用于处理日志的logging模块,下面我们来说一下专门处理配置文件的configparser模块。这个模块其实也没什么难度,说到底还是做文件处理用的,做运维的朋友们可以多研究下。来吧,直接上代码:importconfigparserconfig=configparser.ConfigParser()c......
  • Lua调用C的函数
    #include<iostream>#include<string>usingnamespacestd;extern"C"{#include"lua.h"#include"lualib.h"#include"lauxlib.h"}intmyTest(lua_State*L){//获得Lua函数的参数的数量intn......