当前位置: 首页 > news >正文

Python 代码编写规范

本规范旨在为 Python 项目的代码编写提供一致性指南。它遵循 Python 社区的 PEP 8 标准,并结合了通用的编程最佳实践。

1. 编码风格

1.1 缩进

  • 使用 4 个空格 作为缩进,不要使用制表符(Tab)。
def example():if True:print("Use 4 spaces for indentation.")

1.2 行宽

  • 每行代码不应超过 79 个字符,对于文档字符串或注释,行宽不超过 72 个字符。如果代码行太长,可以使用显式换行符 \ 或利用小括号、方括号等自然换行。

# 长行的示例:
def function_with_long_arguments(arg1, arg2, arg3, arg4, arg5):pass

1.3 空行

  • 在顶级定义(如函数、类)之间留出两个空行。

  • 在方法定义和类定义内部的函数之间留出一个空行。

class MyClass:def method_one(self):passdef method_two(self):pass

1.4 空格的使用

  • 函数调用时,不要在括号内添加空格:
print("Hello")  # 正确
print( "Hello" )  # 错误

  • 避免在以下情况中使用多余的空格:
  • 列表、字典等容器的括号内不使用空格:
my_list = [1, 2, 3]  # 正确
my_list = [ 1, 2, 3 ]  # 错误

2. 命名规范(naming conventions)

2.1 变量、函数与方法

  • 使用 snake_case 命名,即小写字母加下划线分隔单词。
def calculate_total():total_value = 0return total_value

2.2 类名

  • 使用 CamelCase 命名法,即每个单词首字母大写。
class EmployeeManager:pass

2.3 常量

  • 常量使用全大写字母,单词之间用下划线(underscores)分隔。
MAX_SIZE = 100

2.4 私有属性与方法

  • 私有属性或方法使用前导单下划线 _ 来表示,不强制限制,但表示不应从外部访问。
class MyClass:def _private_method(self):pass

2.5 包名

全小写字母:包名通常应使用小写字母,不使用大写字母。可以使用下划线(_)来分隔单词,但更推荐直接使用小写字母连接。

  • 示例: mypackagemy_package

公司或项目前缀(可选):对于公司内部项目,包名可以包含公司或项目的前缀,保证包的唯一性,避免内部冲突。

  • 示例: company_projectname

2.6. 特殊方法(魔术方法)

  • 特殊方法(也叫魔术方法)是 Python 类中内置(built-in)的、以双下划线开头和结尾的方法。这些方法有特定的行为和用途,比如 __init____str____repr__ 等。
  • 不要为普通方法使用双下划线,这种命名方式应只用于 Python 内部功能。
class MyClass:def __init__(self, value):self.value = valuedef __str__(self):return str(self.value)

3. 注释与文档

3.1 行内注释

  • 行内注释应与代码对齐,并与代码留有至少两个空格的间距。
x = x + 1  # 增加计数

3.2 块注释

  • 使用块注释为代码片段提供详细的说明,每行应以 # 开头,并与代码对齐。
  • # 计算总值
    # 如果项目为空,返回0
    def calculate_total():pass
    

3.3 文档字符串(Docstring)

  • 为每个模块、类和函数编写文档字符串,说明其功能、参数、返回值等。使用三引号 """ 进行定义。

    def add(a, b):"""Adds two numbers together.:param a: The first number.:param b: The second number.:return: The sum of a and b."""return a + b
    

4. 代码结构

4.1 导入顺序

  • 导入应按以下顺序排列,且每类导入之间用一个空行分隔:

    1. 标准库导入
    2. 第三方库导入
    3. 本地模块导入
    import os
    import sysimport requestsfrom mymodule import MyClass
    

4.2 避免循环导入

  • 避免模块之间的循环导入。如果遇到循环导入问题,可以将导入语句移到函数或方法内部,确保在需要时才进行导入。

5. 异常处理

5.1 捕获特定异常

  • 避免使用裸 except,应尽量捕获特定的异常类型。
    try:result = 10 / 0
    except ZeroDivisionError:print("Cannot divide by zero.")
    

5.2 使用 finally

  • 如果代码块中有需要无论是否抛出异常都要执行的操作,应使用 finally

    try:file = open("file.txt")
    finally:file.close()
    

6. 测试

6.1 编写单元测试

  • 使用 unittestpytest 编写单元测试。确保每个函数和模块都有相应的测试覆盖。

6.2 保持测试的独立性

  • 测试用例应保持相互独立,不依赖其他测试的执行结果。

6.3 测试命名

  • 测试函数应以 test_ 开头,便于测试框架自动识别。

    def test_add():assert add(2, 3) == 5
    

http://www.lryc.cn/news/454662.html

相关文章:

  • k8s中pod的管理
  • JavaScript中引用数据类型的浅拷贝
  • 自闭症寄宿学校陕西:提供综合发展的教育环境
  • JS模块化工具requirejs详解
  • JavaScript中的异步编程:从回调到Promise
  • windows下DockerDesktop命令行方式指定目录安装
  • 排查和解决JVM OOM实战
  • 【Swift官方文档】7.Swift集合类型
  • QT调用最新的libusb库
  • 白嫖EarMaster Pro 7简体中文破解版下载永久激活
  • 使用JavaScript写一个网页端的四则运算器
  • Linux find命令详解及实用示例
  • CSS基础-常见属性(二)
  • Spring Boot 2.4.3 + Java 8 升级为 Java 21 + Spring Boot 3.2.0
  • 如何利用免费音频剪辑软件制作出精彩音频
  • 安宝特分享 | AR技术重塑工业:数字孪生与沉浸式培训的创新应用
  • 专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
  • 基于springboot vue3 在线考试系统设计与实现 源码数据库 文档
  • 什么是 HTTP 请求中的 options 请求?
  • [图形学]smallpt代码详解(1)
  • Vite多环境配置与打包:
  • git维护【.gitignore文件】
  • 【Canvas与色彩】十六等分多彩隔断圆环
  • 什么是pip? -- Python 包管理工具
  • FastAPI框架使用枚举来型来限定参数、FastApi框架隐藏没多大意义的Schemes模型部分内容以及常见的WSGI服务器Gunicorn、uWSGI了解
  • OceanBase—02(入门篇——对于单副本单节点,由1个observer扩容为3个observer集群)——之前的记录,当初有的问题未解决,目前新版未尝试
  • 前沿论文创新点集合
  • 刷题记录(好题)
  • 【大数据入门 | Hive】函数{单行函数,集合函数,炸裂函数,窗口函数}
  • python sqlite3 工具函数