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

Python 注释进阶之Google风格

文章目录

    • 1. Google 风格 Docstring 的核心特点
    • 2. Google 风格的基本结构
    • 3. 编写规则和注意事项
    • 4. 最常用的 Google 风格 Docstring 示例
        • 示例 1:普通函数
      • 示例 2:带默认参数和可变参数的函数
      • 示例 3:类
      • 示例 4:生成器函数
      • 示例 5:模块级 Docstring
    • 5. 高级用法和扩展
    • 6. 常见错误和如何避免
    • 7. 为什么选择 Google 风格
      • 8. 总结

Google 风格的 Python Docstring 是一种广泛使用的文档字符串格式,旨在以清晰、简洁的方式描述 Python 代码的功能、参数、返回值等信息。它由 Google 提出,定义在 Google Python Style Guide 中,因其结构化、可读性强且易于解析,受到许多开发者和项目的青睐(如 TensorFlow、Google Cloud 等)。Google 风格 Docstring 使用三引号( """''')定义,遵循特定结构,适合手动阅读和自动文档生成工具(如 Sphinx)。

以下是对 Google 风格 Docstring 的全面讲解,包括其结构、规则、常用场景、注意事项,以及最常用的几个示例。


1. Google 风格 Docstring 的核心特点

  • 结构化:采用固定的标题(如 ArgsReturnsRaises 等)来组织信息,便于快速查找。
  • 简洁但详尽:描述应清晰,避免冗长,重点突出函数或类的用途、输入输出及可能的异常。
  • 人类可读:优先考虑开发者的阅读体验,同时支持工具解析。
  • 灵活性:适用于函数、方法、类、模块等多种代码单元。
  • 与类型提示结合:虽然 Google 风格允许在 Args 中指定参数类型,但现代 Python 更推荐使用类型提示(type hints),Docstring 则专注于描述参数的含义。

2. Google 风格的基本结构

Google 风格 Docstring 通常包括以下部分(按需选择):

  1. 顶层描述

    • 函数、类或模块的简要概述,说明其主要功能或目的。
    • 通常是一两句话,放在 Docstring 开头。
  2. Args

    • 列出所有参数及其描述。
    • 格式为:参数名 (类型): 描述
    • 如果参数有默认值或特殊约束,应在描述中说明。
    • 对于 *args**kwargs,需要说明它们的用途。
  3. Returns

    • 描述函数的返回值及其类型。
    • 格式为:(类型): 描述
    • 如果函数返回多个值(如元组),需要说明每个部分的含义。
  4. Yields(生成器函数):

    • 对于生成器函数,描述每次 yield 的值及其类型。
    • 格式与 Returns 类似。
  5. Raises

    • 列出函数可能抛出的异常及其触发条件。
    • 格式为:异常类型: 描述
  6. Attributes(类或模块):

    • 描述类或模块的公共属性(变量)。
    • 格式为:属性名 (类型): 描述
  7. Examples(可选):

    • 提供使用示例,展示函数或类的典型用法。
    • 通常以代码块形式(缩进)编写。
  8. Note(可选):

    • 提供额外信息,如实现细节、性能考虑或警告。
  9. See Also(可选):

    • 指向相关的函数、类或外部资源。

3. 编写规则和注意事项

  • 缩进:Docstring 内容应与三引号的缩进对齐,通常为 4 个空格。
  • 空行
    • 顶层描述与后续部分(如 Args)之间加一个空行。
    • 每个部分(如 ArgsReturns)之间不需要空行,除非内容复杂。
  • 参数描述
    • 参数名后跟类型(括号包裹),类型后跟冒号和描述。
    • 描述以大写字母开头,句号结尾,保持完整句子。
    • 如果参数是可选的或有默认值,需在描述中说明。
  • 类型信息
    • 虽然可以在 Docstring 中指定类型,但推荐使用 Python 的类型提示(def func(x: int)),Docstring 仅描述含义。
    • 如果未使用类型提示,Docstring 中的类型描述尤为重要。
  • 一致性
    • 项目中应统一风格,避免混用不同 Docstring 格式。
    • 对于复杂项目,建议结合 Sphinx 等工具生成文档。
  • 避免冗余
    • 如果函数名或参数名已经足够自描述,Docstring 应避免重复信息。
    • 例如,def get_name() -> str 不需要过多描述返回值。

4. 最常用的 Google 风格 Docstring 示例

以下是最常见的几种场景,展示了 Google 风格 Docstring 的实际应用,涵盖函数、类、模块和生成器等。

示例 1:普通函数
def calculate_area(length: float, width: float) -> float:"""Calculate the area of a rectangle.Args:length (float): The length of the rectangle in meters.width (float): The width of the rectangle in meters.Returns:float: The area of the rectangle in square meters.Raises:ValueError: If length or width is negative."""if length < 0 or width < 0:raise ValueError("Length and width must be non-negative.")return length * width

说明

  • 顶层描述简洁,说明函数用途。
  • Args 列出参数,类型明确,描述含义。
  • Returns 指定返回值类型和单位。
  • Raises 说明异常情况。

示例 2:带默认参数和可变参数的函数

def send_message(recipient: str, message: str, priority: str = "normal", *args, **kwargs) -> bool:"""Send a message to a recipient with optional priority and metadata.Args:recipient (str): The email address of the recipient.message (str): The content of the message.priority (str): The priority level of the message. Defaults to "normal".*args: Additional positional arguments for message formatting.**kwargs: Additional metadata for the message (e.g., sender, timestamp).Returns:bool: True if the message was sent successfully, False otherwise.Examples:>>> send_message("user@example.com", "Hello!", priority="high", sender="admin")True"""# 实现代码省略return True

说明

  • 处理默认参数(priority)和可变参数(*args**kwargs)。
  • Examples 展示典型用法。
  • 返回值类型简单,描述清晰。

示例 3:类

class DatabaseConnection:"""A class to manage database connections.Args:host (str): The database host address.port (int): The database port number.username (str): The username for authentication.password (str): The password for authentication.Attributes:connection (Connection): The active database connection object.is_connected (bool): Whether the connection is currently active.Raises:ConnectionError: If the connection cannot be established."""def __init__(self, host: str, port: int, username: str, password: str):self.host = hostself.port = portself.username = usernameself.password = passwordself.connection = Noneself.is_connected = False# 连接逻辑省略def query(self, sql: str) -> list:"""Execute a SQL query and return results.Args:sql (str): The SQL query string.Returns:list: The query results as a list of rows."""# 查询逻辑省略return []

说明

  • 类级 Docstring 描述类功能,包含构造参数(__init__ 的参数)和属性。
  • 方法级 Docstring 描述具体方法。
  • Attributes 列出类的重要属性。

示例 4:生成器函数

def fibonacci(n: int) -> Iterator[int]:"""Generate the first n Fibonacci numbers.Args:n (int): The number of Fibonacci numbers to generate.Yields:int: The next Fibonacci number in the sequence.Raises:ValueError: If n is negative."""if n < 0:raise ValueError("n must be non-negative.")a, b = 0, 1for _ in range(n):yield aa, b = b, a + b

说明

  • 使用 Yields 描述生成器的每次返回值。
  • 异常情况明确说明。

示例 5:模块级 Docstring

"""A module for handling file operations.This module provides utilities for reading, writing, and managing files.Attributes:DEFAULT_ENCODING (str): The default file encoding, set to 'utf-8'.Functions:read_file: Read the contents of a file.write_file: Write content to a file.
"""
DEFAULT_ENCODING = "utf-8"def read_file(file_path: str) -> str:"""Read the contents of a file.Args:file_path (str): The path to the file.Returns:str: The contents of the file.Raises:FileNotFoundError: If the file does not exist."""with open(file_path, "r", encoding=DEFAULT_ENCODING) as f:return f.read()

说明

  • 模块级 Docstring 描述模块的整体功能和内容。
  • 使用 AttributesFunctions 列出模块的公共接口。
  • 函数级 Docstring 保持一致风格。

5. 高级用法和扩展

  • 复杂参数

    • 如果参数是复杂对象(如字典或自定义类),可以在 Args 中详细描述其结构。
    • 示例:
      def process_config(config: dict) -> None:"""Process a configuration dictionary.Args:config (dict): A dictionary with configuration settings.Expected keys:- 'host' (str): The server host.- 'port' (int): The server port.- 'timeout' (float, optional): Connection timeout in seconds."""# 实现省略pass
      
  • 多行描述

    • 如果参数或返回值的描述较长,可以换行,但保持缩进对齐。
    • 示例:
      def fetch_data(url: str) -> dict:"""Fetch data from a remote API.Args:url (str): The API endpoint URL. Must be a valid HTTPS URLstarting with 'https://' and include necessary query parameters.Returns:dict: The parsed JSON response from the API, containingthe requested data or an error message."""# 实现省略return {}
      
  • 与 Sphinx 集成

    • Google 风格 Docstring 可通过 sphinx.ext.napoleon 扩展直接解析,生成 HTML 或 PDF 文档。
    • 需要在 Sphinx 配置文件中启用 napoleon
      extensions = ['sphinx.ext.napoleon']
      napoleon_google_docstring = True
      

6. 常见错误和如何避免

  • 不一致的类型信息

    • 如果使用类型提示,确保 Docstring 中的类型与注解一致。
    • 错误示例:
      def func(x: int) -> str:"""Args: x (float): A number."""return str(x)
      
    • 修正:将 Docstring 中的 float 改为 int
  • 缺少必要部分

    • 如果函数有返回值但未写 Returns,或抛出异常但未写 Raises,可能导致文档不完整。
    • 解决:检查函数逻辑,确保所有可能的情况都描述。
  • 过于冗长

    • 避免在 Docstring 中重复代码逻辑或写不必要的细节。
    • 错误示例:
      def add(a: int, b: int) -> int:"""Add a and b. This function takes a, adds b to it, and returns the result."""return a + b
      
    • 修正:简化为 "Add two numbers."

7. 为什么选择 Google 风格

  • 易读性:结构清晰,标题明确,适合快速浏览。
  • 社区支持:许多开源项目(如 TensorFlow)使用 Google 风格,开发者熟悉度高。
  • 工具兼容:与 Sphinx、PyCharm 等工具无缝集成,支持文档生成和代码补全。
  • 灵活性:适用于各种规模的项目,从小型脚本到大型框架。

8. 总结

Google 风格 Docstring 是 Python 中一种强大的文档工具,通过结构化的 ArgsReturnsRaises 等部分,提供清晰的代码描述。它适合需要高可读性和文档生成的项目,尤其在团队协作和开源项目中。开发者应结合类型提示,遵循项目一致性,并在复杂场景下补充 ExamplesNote 等部分。

相关文章:

Python 注释进阶之Google风格

文章目录 1. Google 风格 Docstring 的核心特点2. Google 风格的基本结构3. 编写规则和注意事项4. 最常用的 Google 风格 Docstring 示例示例 1&#xff1a;普通函数 示例 2&#xff1a;带默认参数和可变参数的函数示例 3&#xff1a;类示例 4&#xff1a;生成器函数示例 5&…...

写测试文档时,需要的环境配置怎么查看

操作系统 cat /etc/os-releaseCPU信息 lscpu 内存 sudo dmidecode --type memory | grep -E "Size:|Type:|Speed:"硬盘 列出当前系统中 所有块设备&#xff08;Block Devices&#xff09; 的信息&#xff0c;并显示指定列&#xff08;-o 参数&#xff09; lsblk…...

强化学习的数学原理(十)actor-critic 方法

由于全文太长&#xff0c;只好分开发了。(已完结&#xff01;在专栏查看本系列其他文章&#xff09; 个人博客可以直接看全文~ 本系列为在学习赵世钰老师的“强化学习的数学原理” 课程后所作笔记。 课堂视频链接https://www.bilibili.com/video/BV1sd4y167NS/ 第十章 acto…...

多个定时器同时工作时,会出现哪些常见的bug ,如何解决??(定时任务未实时更新但刷新后正常的问题分析)

1. 定时器冲突与覆盖 问题&#xff1a;后设置的定时器可能覆盖先前的定时器&#xff0c;导致前一个定时器失效 原因&#xff1a;未正确管理定时器ID或未清除前一个定时器 2. 性能问题 内存泄漏&#xff1a;未清除不再需要的定时器会导致内存占用不断增加 CPU过载&#xff1a…...

代码随想录算法训练营day5(哈希表)

华子目录 有效的字母异位词思路 有效的字母异位词 https://leetcode.cn/problems/valid-anagram/description/ 思路 使用哈希表&#xff0c;这里哈希表使用数组先申请一个26空间的大小的数组遍历第一个字符串&#xff0c;记录每个字符出现的次数1遍历第二个字符串&#xff0c…...

Python(17)Python字符编码完全指南:从存储原理到乱码终结实战

目录 背景介绍一、字符编码核心原理1. 计算机存储本质2. Python3的编码革命3. 主流编码格式对比 二、编码转换核心方法1. 编码&#xff08;Encode&#xff09;过程2. 解码&#xff08;Decode&#xff09;过程3. 错误处理策略 三、文件操作编码实战1. 文本文件读写2. 二进制模式…...

Node.js 文件读取与复制相关内容

Node.js 文件读取与复制相关内容的系统总结&#xff0c;包括 同步读取、异步读取、流式读取、复制操作、两者对比及内存测试。 &#x1f9e9; 一、Node.js 文件读取方式总结 Node.js 使用 fs&#xff08;文件系统&#xff09;模块进行文件操作&#xff1a; 1. 同步读取&#…...

大数据面试问答-HBase/ClickHouse

1. HBase 1.1 概念 HBase是构建在Hadoop HDFS之上的分布式NoSQL数据库&#xff0c;采用列式存储模型&#xff0c;支持海量数据的实时读写和随机访问。适用于高吞吐、低延迟的场景&#xff0c;如实时日志处理、在线交易等。 RowKey&#xff08;行键&#xff09; 定义&#xf…...

jupyter 文件浏览器,加强版,超好用,免费exe

第一步&#xff1a;github搜索 lukairui的 jupyter-viewer-plus 仓库 第二步&#xff1a; git clone 到本地。 解压zip包 第三步&#xff1a; 进入压缩包&#xff0c;第一次双击打开jupyter-viewer-plus.exe运行&#xff0c;第一次运行后&#xff0c;界面上有一个“设为…...

【AI工具】用大模型生成脑图初试

刚试用了一下通过大模型生成脑图&#xff0c;非常简单&#xff0c;记录一下 一、用大模型生成脑图文件 关键&#xff1a;存在markdown文件 举例&#xff1a;使用Deepseek&#xff0c;输入问题&#xff1a;“针对大模型的后训练&#xff0c;生成一个开发计划&#xff0c;用ma…...

数据结构-树与二叉树

一、树的定义与基本术语 1.1 树的定义 树&#xff08;Tree&#xff09;是一种非线性的数据结构&#xff0c;它是由 n&#xff08;n ≥ 0&#xff09;个有限节点组成的集合。如果 n 0&#xff0c;称为空树&#xff1b;如果 n > 0&#xff0c;则&#xff1a; 有一个特定的节…...

STL_unordered_map_01_基本用法

&#x1f44b; Hi, I’m liubo&#x1f440; I’m interested in harmony&#x1f331; I’m currently learning harmony&#x1f49e;️ I’m looking to collaborate on …&#x1f4eb; How to reach me …&#x1f4c7; sssssdsdsdsdsdsdasd&#x1f383; dsdsdsdsdsddfsg…...

ARCGIS国土超级工具集1.5更新说明

ARCGIS国土超级工具集V1.5版本更新说明&#xff1a;因作者近段时间工作比较忙及正在编写ARCGISPro国土超级工具集&#xff08;截图附后&#xff09;的原因&#xff0c;故本次更新为小更新&#xff08;没有增加新功能&#xff0c;只更新了已有的工具&#xff09;。本次更新主要修…...

主流物理仿真引擎和机器人/强化学习仿真平台对比

以下是当前主流的物理仿真引擎和机器人/强化学习仿真平台的特点和适用场景&#xff0c;方便根据需求选择&#xff1a; &#x1f9e0; NVIDIA 系列 ✅ Isaac Lab v1.4 / v2 特点&#xff1a; 基于 Omniverse Isaac Sim&#xff0c;属于高端视觉机器人仿真框架v2 更加模块化&a…...

STM32 HAL库内部 Flash 读写实现

一、STM32F407 内部 Flash 概述 1.1 Flash 存储器的基本概念 Flash 存储器是一种非易失性存储器&#xff0c;它可以在掉电的情况下保持数据。STM32F407 系列微控制器内部集成了一定容量的 Flash 存储器&#xff0c;用于存储程序代码和数据。Flash 存储器具有擦除和编程次数的…...

C++学习:六个月从基础到就业——面向对象编程:构造函数与析构函数

C学习&#xff1a;六个月从基础到就业——面向对象编程&#xff1a;构造函数与析构函数 本文是我C学习之旅系列的第十篇技术文章&#xff0c;主要讨论C中构造函数与析构函数的概念、特点和使用技巧。这些是C对象生命周期管理的关键组成部分。查看完整系列目录了解更多内容。 引…...

dfs二叉树中的深搜(回溯、剪枝)--力扣129、814、230、257

目录 1.1题目链接&#xff1a;129.求根节点到叶结点数字之和 1.2题目描述&#xff1a;给你一个二叉树的根节点 root &#xff0c;树中每个节点都存放有一个 0 到 9 之间的数字。 1.3解法(dfs-前序遍历)&#xff1a; 2.1题目链接&#xff1a;814.二叉树剪枝 2.2题目描述&…...

Python Selenium 一小时速通教程

Python Selenium 一小时速通教程 实战案例 一、环境配置&#xff08;10分钟&#xff09; 安装Python 确保已安装Python 3.x&#xff08;官网下载&#xff09;。 安装Selenium 在终端运行&#xff1a; pip install selenium下载浏览器驱动 Chrome&#xff1a;访问 ChromeDriv…...

通过GO后端项目实践理解DDD架构

最近在工作过程中重构的项目要求使用DDD架构&#xff0c;在网上查询资料发现教程五花八门&#xff0c;并且大部分内容都是长篇的概念讲解&#xff0c;晦涩难懂&#xff0c;笔者看了一些github上入门的使用DDD的GO项目&#xff0c;并结合自己开发中的经验&#xff0c;谈谈自己对…...

MybatisPlus最新版分页无法使用

在使用分页的时候发现分页拦截器关键API会报错&#xff0c;其实根本原因是在之前只需要导入一个mybatisplus依赖&#xff0c;而现在分页似乎被单独分离出来了&#xff0c;需要额外导入新依赖使其支持 ​ <dependency><groupId>com.baomidou</groupId><art…...

【Android学习记录】工具使用

文章目录 一. 精准找视图资源ID1. 准备工作2. 使用 uiautomator 工具2.1. 获取设备的窗口内容2.2. Pull XML 文件2.3. 查看 XML 文件 3. 直接使用 ADB 命令4. 使用 Android Studio 的 Layout Inspector总结 二. adb shell dumpsys activity1. 如何使用 ADB 命令2. 输出内容解析…...

youtube视频和telegram视频加载原理差异分析

1. 客户侧缓存与流式播放机制​​ 流式视频应用&#xff08;如 Netflix、YouTube&#xff09;通过​​边下载边播放​​实现流畅体验&#xff0c;其核心依赖以下技术&#xff1a; ​​缓存预加载​​&#xff1a;客户端在后台持续下载视频片段&#xff08;如 DASH/HLS 协议的…...

在机器视觉检测中为何选择线阵工业相机?

线阵工业相机&#xff0c;顾名思义是成像传感器呈“线”状的。虽然也是二维图像&#xff0c;但极宽&#xff0c;几千个像素的宽度&#xff0c;而高度却只有几个像素的而已。一般在两种情况下使用这种相机&#xff1a; 1. 被测视野为细长的带状&#xff0c;多用于滚筒上检测的问…...

lwip记录

Index of /releases/lwip/ (gnu.org) 以太网(Ethernet)是互联网技术的一种&#xff0c;由于它是在组网技术中占的比例最高&#xff0c;很多人 直接把以太网理解为互联网。 以太网是指遵守 IEEE 802.3 标准组成的局域网&#xff0c;由 IEEE 802.3 标准规定的主要是位于 参考模…...

Redis清空缓存

尽管redis可以设置ttl过期时间进行指定key的定时删除&#xff0c;但是在某些场景下&#xff0c;比如&#xff1a; 测试时需要批量删除指定库下所有库下所有的数据&#xff0c;则会涉及到缓存清除的话题。 如下为具体的操作及说明&#xff1a; 场景类型操作指令清空当前库下所有…...

WPF 依赖注入启动的问题

原因是在App.xaml 设置了 StartupUri“MainWindow.xaml” 1.依赖注入后启动的主窗体存在无参构造 程序正常启动&#xff0c;但是主窗体界面会弹出2个窗体。 2.依赖注入后启动的主窗体存在有参构造 报错...

Arcgis经纬线标注设置(英文、刻度显示)

在arcgis软件中绘制地图边框&#xff0c;添加经纬度度时常常面临经纬度出现中文&#xff0c;如下图所示&#xff1a; 解决方法&#xff0c;设置一下Arcgis的语言 点击高级--确认 这样Arcgis就转为英文版了&#xff0c;此时在来看经纬线刻度的标注&#xff0c;自动变成英文...

【电子通识】案例:电缆的安装方式也会影响设备的可靠性?

背景 在日常生活中&#xff0c;我们常常会忽略一些看似微不足道的细节&#xff0c;但这些细节有时却能决定设备的寿命和安全性。比如&#xff0c;你知道吗&#xff1f;一根电缆的布置方式&#xff0c;可能会决定你的设备是否会因为冷凝水而损坏。 今天&#xff0c;我们就来聊聊…...

房屋装修费用预算表:45594 =未付14509 + 付清31085【时间:20250416】

文章目录 引言I 房屋装修费用预算表II 市场价参考防水搬运3000III 装修计划整体流程进度细节国补IV 付款凭证(销售单)伟星 PPR +PVC+太阳线+地漏=6500入户门设计通铺大板瓷砖 | 湿贴 3408(地)+3600(加)+5209(墙)=12217元门头铁空调引言 关注我,发送【装修记账】获取预…...

Python文件操作完全指南:从基础到高级应用

目录 一、文件基础概念 1.1 什么是文件&#xff1f; 1.2 文件的存储方式 文本文件 二进制文件 二、Python文件操作基础 2.1 文件操作三步曲 2.2 核心函数与方法 2.3 文件读取详解 基本读取示例 文件指针机制 2.4 文件打开模式 写入文件示例 2.5 高效读取大文件 三…...

03(总)-docker篇 Dockerfile镜像制作(jdk,jar)与jar包制作成docker容器方式

全文目录,一步到位 1.前言简介1.1 专栏传送门1.1.2 上文传送门 2. docker镜像制作一: jdk2.1 制作jdk镜像2.1.1 准备工作2.1.2 jdk镜像的Dockerfile2.1.3 基于Dockerfile构建镜像2.1.4 docker使用镜像运行容器2.1.5 进入jdk1.8容器内测试 3. docker镜像制作二: java镜像(jar包)…...

CUDA的安装

打开nvidia控制面板 找到组件 打开 CUDA Toolkit Archive | NVIDIA Developer 下载CUDA...

四六级听力调频广播有线传输无线覆盖系统:弥补单一发射系统安全缺陷,构建稳定可靠听力系统平台

四六级听力调频广播有线传输无线覆盖系统:弥补单一发射系统安全缺陷&#xff0c;构建稳定可靠听力系统平台 北京海特伟业科技有限公司任洪卓发布于2025年4月16日 随着英语四六级考试的规模不断扩大&#xff0c;听力考试部分的设备可靠性问题日益凸显。传统的无线发射系统存在…...

信创服务器-大国崛起,信创当道!

信创产业是数据安全、网络安全的基础&#xff0c;也是新基建的重要组成部分。在政策的推动下&#xff0c;2020-2022 年&#xff0c;中国信创服务器出货量整体呈现出快速增长的趋势&#xff0c;其中党政、电信、金融等领域采购频次高&#xff0c;单次采购量大&#xff0c;是中国…...

【仿Mudou库one thread per loop式并发服务器实现】SERVER服务器模块实现

SERVER服务器模块实现 1. Buffer模块2. Socket模块3. Channel模块4. Poller模块5. EventLoop模块5.1 TimerQueue模块5.2 TimeWheel整合到EventLoop5.1 EventLoop与线程结合5.2 EventLoop线程池 6. Connection模块7. Acceptor模块8. TcpServer模块 1. Buffer模块 Buffer模块&…...

冒泡与 qsort 排序策略集

今天我们要学习两种排序方法&#xff0c;分别是冒泡排序和qsort函数排序,冒泡排序相对qsort函数排序要简单一点&#xff0c;更易于理解。 1.冒泡排序 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;它通过重复遍历元素列并比较相邻元素来实现排…...

【Linux】第七章 控制对文件的访问

目录 1. 什么是文件系统权限&#xff1f;它是如何工作的&#xff1f;如何查看文件的权限&#xff1f; 2. 解释‘-rw-r--r--’这个字符串。 3. 使用什么命令可以更改文件和目录的权限&#xff1f;写出分别使用符号法和数值法将权限从 754 修改为 775 的命令。 4. 如何修改文…...

网站301搬家后谷歌一直不收录新页面怎么办?

当网站因更换域名或架构调整启用301重定向后&#xff0c;许多站长发现谷歌迟迟不收录新页面&#xff0c;甚至流量大幅下滑。 例如&#xff0c;301跳转设置错误可能导致权重传递失效&#xff0c;而新站内容与原站高度重复则可能被谷歌判定为“低价值页面”。 即使技术层面无误&a…...

socket 客户端和服务器通信

服务器 using BarrageGrab; using System; using System.Collections.Concurrent; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading;namespace Lyx {class Server{private TcpListener listener;private Concurre…...

C实现md5功能

md5在线验证&#xff1a; 在线MD5计算_ip33.com 代码如下&#xff1a; #include "md5.h" #include <string.h> #include "stdio.h"/** 32-bit integer manipulation macros (little endian)*/ #ifndef GET_ULONG_LE #define GET_ULONG_LE(n,b,i) …...

【项目】CherrySudio配置MCP服务器

CherrySudio配置MCP服务器 &#xff08;一&#xff09;Cherry Studio介绍&#xff08;二&#xff09;MCP服务环境搭建&#xff08;1&#xff09;环境准备&#xff08;2&#xff09;依赖组件安装<1> Bun和UV安装 &#xff08;3&#xff09;MCP服务器使用<1> 搜索MCP…...

第五节:React Hooks进阶篇-如何用useMemo/useCallback优化性能

反模式&#xff1a;滥用导致的内存开销React 19编译器自动Memoization原理 React Hooks 性能优化进阶&#xff1a;从手动到自动 Memoization &#xff08;基于 React 18 及以下版本&#xff0c;结合 React 19 新特性分析&#xff09; 一、useMemo/useCallback 的正确使用场景…...

【Qt】QWidget 核⼼属性详解

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;QT 欢迎大家点赞收藏评论&#x1f60a; 目录 &#x1f3dd; 一.相关概念&#x1f3a8;二. 核⼼属性概览&#x1f344;2.1 enabled&#x1f96d;2.2geometry&#x1f338; 2.3 windowTitle&#…...

如何知道raid 有问题了

在 Rocky Linux 8 上&#xff0c;你的服务器使用了 RAID5&#xff08;根据 lsblk 输出&#xff0c;/dev/sda3、/dev/sdb1 和 /dev/sdc1 组成 md127 RAID5 阵列&#xff09;。为了监控 RAID5 阵列中磁盘的健康状态&#xff0c;并及时发现某块磁盘损坏&#xff0c;可以通过以下方…...

操作系统之shell实现(上)

&#x1f31f; 各位看官好&#xff0c;我是maomi_9526&#xff01; &#x1f30d; 种一棵树最好是十年前&#xff0c;其次是现在&#xff01; &#x1f680; 今天来学习C语言的相关知识。 &#x1f44d; 如果觉得这篇文章有帮助&#xff0c;欢迎您一键三连&#xff0c;分享给更…...

精益数据分析(3/126):用数据驱动企业发展的深度解析

精益数据分析&#xff08;3/126&#xff09;&#xff1a;用数据驱动企业发展的深度解析 大家好&#xff01;一直以来&#xff0c;我都坚信在当今竞争激烈的商业环境中&#xff0c;数据是企业获得竞争优势的关键。最近深入研究《精益数据分析》这本书&#xff0c;收获颇丰&…...

React 18/19 使用Ant Design全局弹窗message

react 18 及以上&#xff0c;拥有并发模式&#xff0c;不允许在渲染过程中直接触发副作用&#xff08;如弹窗、网络请求等&#xff09;&#xff0c;应将其放至 useEffect 中&#xff0c;确保其在渲染完成后调用 useEffect(() > {message.success(操作成功&#xff01;);}, …...

【spark3.2.4】--完全分布式集群搭建

一、spark-env.sh 文件配置&#xff08;操作路径&#xff1a;$SPARK_HOME/conf/spark-env.sh&#xff09; 如果还没创建&#xff1a; cp $SPARK_HOME/conf/spark-env.sh.template $SPARK_HOME/conf/spark-env.sh然后编辑&#xff08;比如用 vim&#xff09;&#xff1a; vim…...

Web3技术下数字资产数据保护的实践探索

在这个信息爆炸的时代&#xff0c;数字资产已经成为我们生活中不可或缺的一部分。随着Web3技术的兴起&#xff0c;它以其去中心化、透明性和安全性的特点&#xff0c;为数字资产的管理和保护提供了新的解决方案。本文将探讨Web3技术在数字资产数据保护方面的实践探索&#xff0…...

灰度共生矩阵(GLCM)简介

灰度共生矩阵(GLCM)简介 1. 基本概念 灰度共生矩阵(Gray-level Co-occurrence Matrix, GLCM)是一种用于分析图像纹理特征的统计方法。它通过计算图像中特定空间关系的像素对出现的频率,来描述纹理的规律性1。 核心思想:统计图像中相距为d、方向为θ的两个像素点,分别具…...