首页/新闻资讯/正文详情

Python函数:函数文档字符串docstring编写规范

发布时间:2026/9/24 15:32:11 来源:云帆数科 栏目:资讯中心
Python函数:函数文档字符串docstring编写规范
Python函数函数文档字符串docstring编写规范一、开篇代码是写给人看的好的代码自己会说话而docstring文档字符串就是帮代码说话的工具。一个函数如果没有docstring调用者就只能去读源码或者猜它的用法。⌨️ 对比有和没有docstring的区别# ❌ 没有docstring——只能猜defcalc(a,b,mode1):ifmode1:returnabelifmode2:returna-belse:returna*b# ✅ 有docstring——一目了然defcalc(a:float,b:float,mode:int1)-float:对两个数执行指定的运算。 Args: a: 第一个操作数 b: 第二个操作数 mode: 运算模式1加法2减法其他乘法 Returns: 运算结果 Raises: TypeError: 当操作数不是数字时 ifmode1:returnabelifmode2:returna-belse:returna*b docstring是函数、类、模块的使用说明书。更重要的是Python的help()函数和众多文档生成工具都依赖docstring。写好docstring是对自己三个月后的你和同事最大的善意。二、docstring的基本规则2.1 位置和格式# docstring的基本规则# 1. 放在函数/类/模块的第一行def/class之后的第一条语句# 2. 用三引号包裹或# 3. 可以使用多行defgreet(name:str)-str:向指定的人打招呼。returnf你好{name}# 访问docstringprint(greet.__doc__)# 向指定的人打招呼。# help()查看——更友好的展示# help(greet)# 输出# Help on function greet in module __main__:## greet(name: str) - str# 向指定的人打招呼。# ⚠️ docstring必须是字符串字面量不能是变量# def bad():# doc 文档 # 这不是docstring是普通的字符串赋值# pass2.2 单行docstring# 适用场景函数功能简单明了defadd(a:int,b:int)-int:返回a和b的和。returnabdefis_even(n:int)-bool:判断一个整数是否为偶数。returnn%20# PEP 257规范# - 三引号在同一行开始和结束# - 使用句号结尾# - 描述函数的功能做什么而不是实现怎么做# - 使用命令式语气返回...而不是这个函数返回...2.3 多行docstring# 适用场景函数逻辑复杂需要详细说明deffetch_user_data(user_id:int,fields:list[str]|NoneNone,include_inactive:boolFalse,timeout:int30)-dict|None:从数据库获取用户数据。 根据用户ID查询用户信息。如果提供了fields参数 只返回指定的字段。默认不包含已停用的用户。 Args: user_id: 用户唯一标识符 fields: 需要返回的字段列表None表示返回所有字段 include_inactive: 是否包含已停用的用户 timeout: 查询超时时间秒 Returns: 包含用户数据的字典如果用户不存在则返回None。 字典的键取决于fields参数。 Raises: ValueError: 当user_id小于等于0时 TimeoutError: 查询超时时 DatabaseError: 数据库连接失败时 Examples: fetch_user_data(123) {name: 张三, email: zstest.com, age: 25} fetch_user_data(123, fields[name, age]) {name: 张三, age: 25} fetch_user_data(999) None ifuser_id0:raiseValueError(user_id必须大于0)# ... 实际实现 ...return{name:张三,email:zstest.com,age:25}三、三大docstring风格对比3.1 Google风格推荐defsend_notification(user:str,message:str,*,channel:stremail,priority:strnormal,attachments:list[str]|NoneNone,retry_count:int3)-bool:向用户发送通知消息。 支持多种通知渠道消息发送失败时自动重试。 高优先级消息会绕过用户的免打扰设置。 Args: user: 接收通知的用户名或用户ID message: 通知内容支持纯文本 channel: 通知渠道可选值\email\、\sms\、\push\、 \wechat\。默认\email\ priority: 优先级可选值\low\、\normal\、\high\、 \urgent\。默认\normal\ attachments: 附件文件路径列表None表示无附件 默认None retry_count: 失败重试次数默认3 Returns: True表示发送成功False表示所有重试均失败。 Raises: ValueError: 当channel或priority值不合法时 FileNotFoundError: 当附件文件不存在时 Example: send_notification(张三, 您的订单已发货, ... channelsms, priorityhigh) True send_notification(李四, 服务器告警, ... channelpush, priorityurgent) True valid_channels{email,sms,push,wechat}ifchannelnotinvalid_channels:raiseValueError(f无效的通知渠道:{channel})# ... 实际实现 ...returnTrue3.2 NumPy风格defcalculate_statistics(data:list[float],*,skip_na:boolTrue,percentiles:list[int]|NoneNone)-dict:计算数据集的描述性统计。 Parameters ---------- data : list of float 待分析的数据列表。 skip_na : bool, optional 是否跳过NaN值。默认值为True。 percentiles : list of int or None, optional 需要计算的百分位数列表。默认值为None 不计算百分位数。 Returns ------- dict 包含统计结果的字典包含以下键 - count: 样本数量 - mean: 平均值 - std: 标准差 - min: 最小值 - max: 最大值 - percentiles: 百分位数结果如果指定了percentiles Raises ------ ValueError 当data为空列表时。 Examples -------- calculate_statistics([1.0, 2.0, 3.0, 4.0, 5.0]) {count: 5, mean: 3.0, std: 1.58, min: 1.0, max: 5.0} pass3.3 Sphinx/reStructuredText风格defvalidate_email(email:str)-bool:验证邮箱地址格式是否合法。 :param email: 待验证的邮箱地址字符串 :type email: str :return: 邮箱格式合法返回True否则返回False :rtype: bool :raises TypeError: 当email不是字符串时 验证规则 1. 包含恰好一个 符号 2. 前后都有字符 3. 后面部分包含一个 . :: validate_email(userexample.com) True validate_email(invalid-email) False ifnotisinstance(email,str):raiseTypeError(email必须是字符串)partsemail.split()returnlen(parts)2andall(parts)and.inparts[1]3.4 风格选型建议# 风格选择建议## Google风格 → 推荐最流行可读性最好VS Code/PyCharm原生支持# NumPy风格 → 科学计算/数据分析项目首选# Sphinx风格 → 用Sphinx生成文档的项目传统选择## 关键不是用哪种风格而是在项目中保持一致四、docstring在实际开发中的应用4.1 doctest用docstring做测试# doctest模块可以从docstring中提取示例并自动测试defadd(a:int,b:int)-int:返回两个整数的和。 add(2, 3) 5 add(-1, 1) 0 add(0, 0) 0 returnabdeffactorial(n:int)-int:计算n的阶乘。 factorial(0) 1 factorial(1) 1 factorial(5) 120 factorial(-1) Traceback (most recent call last): ... ValueError: n必须是非负整数 ifn0:raiseValueError(n必须是非负整数)ifn1:return1returnn*factorial(n-1)# 运行doctestif__name____main__:importdoctest doctest.testmod()print(所有doctest通过)4.2 模块和类的docstring 用户管理模块 提供用户注册、登录、信息查询和管理功能。 Classes: User: 用户数据模型 UserManager: 用户管理服务 AuthenticationError: 认证异常 Functions: create_user: 创建新用户 authenticate: 验证用户身份 Usage: from user_management import create_user user create_user(zhangsan, password123, ... emailzstest.com) print(user.name) 张三 classUserManager:用户管理服务类。 负责处理用户的创建、查询、更新和删除操作。 所有数据库操作通过此类统一管理。 Attributes: db_connection: 数据库连接对象 cache: 用户信息缓存 max_cache_size: 最大缓存条目数 Example: manager UserManager(db_conn) user manager.get_user(123) manager.update_user(123, {age: 30}) def__init__(self,db_connection):初始化用户管理器。pass五、总结docstring是程序员给未来的自己和同事写的信。好的docstring让代码自带说明书。核心要点所有公共函数/类/模块都应该有docstringPEP 257是Python docstring的官方规范Google风格是目前最流行的选择doctest让docstring既是文档又是测试一致性比风格更重要——项目内统一风格✅docstring应该写什么函数做什么不是怎么做参数的含义和类型返回值的含义可能抛出的异常简单的使用示例❌docstring不应该写什么显而易见的实现细节版本历史交给git谁写的、什么时候写的交给git blame

相关推荐

Linux防火墙管理:从firewalld区域与服务设计到生产环境安全策略
Linux防火墙管理:从firewalld区域与服务设计到生产环境安全策略

1. 项目概述:为什么我们总在“乱关”防火墙?每次接手一台新的Linux服务器,或者部署一个应用时,你是不是也经常遇到端口不通、服务访问不了的问题?很多人的第一反应,尤其是刚接触运维的朋友,就是… · 2026/9/20 3:05:11

I2S音频接口驱动开发:时钟配置与中断处理实战指南
I2S音频接口驱动开发:时钟配置与中断处理实战指南

1. I2S音频接口驱动开发:从时钟配置到中断处理的实战解析在嵌入式音频开发领域,I2S(Inter-IC Sound)接口是连接数字音频处理器、编解码器和微控制器之间的标准桥梁。它不像I2C或SPI那样需要复杂的协议交互,其核心任务非… · 2026/9/24 15:10:01

多模态大模型视觉Token压缩技术与应用解析
多模态大模型视觉Token压缩技术与应用解析

1. 多模态大模型视觉Token压缩的核心挑战视觉Token压缩技术正在成为多模态大模型领域的关键突破点。当我在处理8K分辨率图像输入时,原始像素直接转换为视觉Token会导致序列长度爆炸性增长——一张普通1080P图像在ViT模型下就可能产生近5000个Token,这直接… · 2026/9/24 15:31:50

Apereo CAS OAuth 2.0 Refresh Token 授权流程(Refresh Token Grant)完全解析
Apereo CAS OAuth 2.0 Refresh Token 授权流程(Refresh Token Grant)完全解析

后端认证鉴权单点登录 【免费下载链接】cas Apereo CAS - Identity & Single Sign On for all earthlings and beyond. 项目地址: https://gitcode.com/gh_mirrors/ca/cas 点击查看 免费下载 本文围绕 Apereo CAS 官方文档中关于 OAuth 2.0 Refresh Token 授权… · 2026/9/24 15:32:07

EAI182X-M2 新品发布:不换主控,插卡升级,怎么让存量设备获得 20TOPS 本地大模型算力?
EAI182X-M2 新品发布:不换主控,插卡升级,怎么让存量设备获得 20TOPS 本地大模型算力?

在端侧AI的性能讨论中,TOPS长期是最常被比较的指标。但当大语言模型进入终端,一个更基础的约束开始主导实际体验:数据能否以足够快的速度送达计算单元。以RK3588为例,其内置NPU提供6TOPS算力,在YOLO检测、人脸识别等CN… · 2026/9/24 15:32:06

IronClaw 的 Loop 家族:可替换的 Agent 用户态与“端口即膜”的信任架构
IronClaw 的 Loop 家族:可替换的 Agent 用户态与“端口即膜”的信任架构

IronClaw 的 Loop 家族:可替换的 Agent 用户态与“端口即膜”的信任架构 【免费下载链接】ironclaw IronClaw is an Agent OS focused on privacy, security and extensibility 项目地址: https://gitcode.com/gh_mirrors/iro/ironclaw crates/loop/ 是 Iron… · 2026/9/24 15:32:06

单晶金刚石散热技术:北睿科技在半导体芯片热管理中的实践路径
单晶金刚石散热技术:北睿科技在半导体芯片热管理中的实践路径

单晶金刚石散热技术是一种利用单晶金刚石极高的热导率(室温下可达2000 W/(mK)以上)将半导体芯片产生的热量快速传导出去的热管理方案。北睿科技围绕该技术,在芯片热管理中探索了从材料制备、界面集成到系统验证的实践路径,旨在为高… · 2026/9/24 15:32:00

django CMS 组合架构解析:内容对象、插件与 Apphook 三大积木如何构成一个站点
django CMS 组合架构解析:内容对象、插件与 Apphook 三大积木如何构成一个站点

CMS后端 【免费下载链接】django-cms The easy-to-use and developer-friendly enterprise CMS powered by Django 项目地址: https://gitcode.com/gh_mirrors/dj/django-cms 点击查看 免费下载 django CMS 站点由三类构建块拼装而成:内容对象&#xf… · 2026/9/24 15:31:54

牛油火锅底料全栈制作指南:从重庆老油炼制到 RAG 食谱系统的结构化数据实践
牛油火锅底料全栈制作指南:从重庆老油炼制到 RAG 食谱系统的结构化数据实践

牛油火锅底料全栈制作指南:从重庆老油炼制到 RAG 食谱系统的结构化数据实践 【免费下载链接】all-in-rag 🔍大模型应用开发实战一:RAG 技术全栈指南,在线阅读地址:https://datawhalechina.github.io/all-in-rag/ 项目… · 2026/9/24 15:31:54

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码