首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >实用Python代码优化技巧

实用Python代码优化技巧

作者头像
盹猫
发布2025-07-22 18:36:18
发布2025-07-22 18:36:18
1570
举报

一、编写目的

在日常开发中,规范的代码结构可以提高代码阅读性,方便后期维护,在开源项目中尤为重要。毕竟谁也不想让人将自己的代码称为"屎山",这里将日常开发中需要注意的点进行总结。

适用于 Python 初学者希望编写更高效代码的学习者,也适用于经验丰富的开发者优化现有项目的实践者。希望通过本指南,让开发者能够掌握 Python 代码优化的核心技巧,提升代码质量,减少运行时间,并增强代码的可扩展性和可维护性。

二、可优化点

2.1 注释

注释放在开头的原因是因为注释在开发中重要,最基本的需要在每个方法中标出该方法的功能,传递的参数、返回值的类型和解释.在Python中推荐使用"""进行标记注释,例如下面这个读取yml配置文件功能的方法:

代码语言:javascript
复制
def load_config(config_path:str)->Dict[str,Any]:
    """
        从路径中读取yml数据

        Args:
            config_path(str): yml文件的路径
        Returns:
            Dict[str,Any]: 配置文件的字典数据
    """
    with open(config_path,"r") as config_file:
        return yaml.safe_load(config_file)

这样做的另一个好处是在使用编辑器(VsCode)时,可以在鼠标指向调用方法可以弹出功能说明和传参等提示,方便维护和别人调用模块参数.内容如下:

代码语言:javascript
复制
(function) def load_config(config_path: str) -> Dict[str, Any]
从路径中读取yml数据

Args
config_path : str
yml文件的路径

Returns
Dict[str,Any]
配置文件的字典数据

2.2 条件语句

在使用条件语句时有两个可优化点,第一个是if...else....嵌套可以转变为先判断否定的参数的返回方法,这样写可读性更高.例如:

代码语言:javascript
复制
    with LOCK:
        chatIds=get_chat_id_list(symbol)
        if chatId not in chatIds:
            return False
        chatIds.remove(chatId)    
        DB.update(set("chatIds", chatIds),QUERY.symbol==symbol)
        return True

在上面的例子中,没有先判断chatId在chatIds中,而是先进行否定判断,这样可以减少else的嵌套并且使可读性更强.

第二个是在进行简单的if.....else....返回值时可以使用三元运算符形式直接返回.

代码语言:javascript
复制
if data_class is None: # 当未配置data_class时,返回默认的字典数据
    return res_json if res_json  else None

这里在判断res_json是否为有数据时直接使用三元运算符,在无数据时返回None,简化了if....else的编写.

2.3 方法参数和返回值

方法参数与返回值都应该标明具体的类型,因为在不标明参数类型的,Python默认使用any类型,这为后期的维护工作埋下了"炸弹",当项目结构越来越复杂时,可能自己都看不懂具体返回了什么数据.推荐进行传参和返回值的标识,无返回值的参数应该标识为None:

代码语言:javascript
复制
def send_request(url:str,headers:str)->Dict[str,Any]:

2.4 异常

在进行异常捕获时,不要使用以下格式进行大范围的捕获:

代码语言:javascript
复制
try:
    {代码块}
except Exception as e:
    {异常输出}

应该详细了解自己捕获的方法会报出具体的哪些异常类型,这样做的好处时当报错时,可以清楚的看到错误数据哪个错误发出的.例如以下格式:

代码语言:javascript
复制
 try:
    response=requests.get(url,headers,timeout=5)
    response.raise_for_status()
    resJson=response.json()
    return resJson
 except RequestException as e:
    print(f"RequestException:{e}")
 except (ValueError,TypeError) as e:
    print(f"Json Decoder Error:{e}")
 except Exception as e:
    print(f"Exception Error:{e}")
 return None

这样捕获时,请求错误会被RequestException捕获,数据解析错误可以被 (ValueError,TypeError)错误捕获,通过自定义打印的字符串可以很清楚的知道因为什么报的错误,以此定位问题所在.

2.5 字典[Dict]

在使用字典取值时应该使用以下方式进行取值:

代码语言:javascript
复制
self.symbol=stats_data.get("symbol","")

使用以上方式的好处时,可以在取值时默认值,不会发生取值异常,这会降低程序运行的稳定性.而不是直接使用以下方式进行取值:

代码语言:javascript
复制
self.symbol=stats_data["symbol"]

2.6 列表

当进行简单的列表的循环操作时,可以使用列表推导式进行简化,例如:

代码语言:javascript
复制
from typing import Type,T,List
def parse_list(data_list:List, cls: Type[T]):
    """
    通用方法,将列表中的每一项转换为指定的类实例。

    :param data_list: 需要转换的数据列表
    :param cls: 目标类,用于实例化列表中的每一项
    :return: 转换后的对象列表
    """
    return [cls(item) for item in data_list]

上述代码中使用列表推导式完成了列表中整体对象的封装,而不是使用for循环每一项进行封装.

2.7 配置

如果存在大量需要经常改动的静态字符串,如API_KEY、密码等,这些可以独立到单独的配置文件中.程序启动时从配置文件中进行读取.一些固定的字符串的如请求URL、标识、提示等需要放在一个单独的文件内进行整体管理,这样可以方便维护.

三、总结

在 Python 开发中,良好的代码风格和优化技巧能提高代码的可读性、可维护性,并减少潜在错误。以上是我在日常开发中的一些总结,如果你有更好的优化,或其它方面的对代码规范、可读性改进的方法,欢迎在评论区留言(虚心学习)。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、编写目的
  • 二、可优化点
    • 2.1 注释
    • 2.2 条件语句
    • 2.3 方法参数和返回值
    • 2.4 异常
    • 2.5 字典[Dict]
    • 2.6 列表
    • 2.7 配置
  • 三、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档