以下文档汇总了 Python 中常用的命名规范、函数签名约定、装饰器、类型注解、魔法方法,以及在大型项目中常见的架构和操作模式。


1. 命名规范(Naming Conventions)

前缀/形式 含义 示例
age 普通变量/属性 age = 30
_age 单下划线:弱“私有”标记,不建议外部使用 self._age = 30
__age 双下划线:名称改写(name mangling) self.__age = 30
__age__ 双前后下划线:系统保留(魔法方法/特殊属性) __init__, __str__
ALL_CAPS 常量 MAX_RETRIES = 5
snake_case 下划线式,函数/变量推荐 compute_value()
MixedCase 类名,首字母大写驼峰式 class MyClass:
mixedCase 驼峰式,不推荐,少见 someVar
module_name 文件或包名,均使用小写+下划线 utils/helpers.py

额外补充

  • __slots__:定义在类中,限制实例属性集合。
  • 模块级 dunder:__name__, __all__, __version__

2. 函数签名与参数约定

def func(pos1, pos2, /, arg1, arg2=42, *args, kw_only1, kw_only2=None, **kwargs) -> ReturnType:
...
  • / 前参数只能通过位置传递(Python 3.8+)。
  • 默认参数带默认值。
  • *args:可变位置参数收集为元组。
  • kw_only:在 * 后的参数必须通过关键字传递。
  • **kwargs:可变关键字参数收集为字典。
  • -> ReturnType:返回值类型注解。

额外补充

  • 参数前置星号:def f(*, a, b): 强制 ab 为关键字。
  • 参数后置斜杠:def f(a, b, /, c): 强制 ab 为位置。
  • 默认值宜使用不可变类型,避免共享可变默认值陷阱。
  • 使用 typing 模块:List[int], Dict[str, Any], Optional[T]

3. 装饰器(Decorators)

  • @decorator:在函数/类定义时应用,等价于:

    func = decorator(func)
  • 内置常用装饰器:

    • @staticmethod
    • @classmethod
    • @property
    • @functools.lru_cache
  • 自定义装饰器:接收被装饰对象并返回新对象。可用于权限校验、缓存、日志等场景。

额外补充

  • 带参装饰器:def deco(arg): ... 返回实际装饰器。
  • functools.wraps:保持原函数元数据。

4. 类型注解(Type Hints)

from typing import List, Dict, Optional, Union, Any

def greet(name: str, times: int = 1) -> None:
... def parse(data: bytes) -> Union[Dict[str, Any], None]:
...
  • Python 3.9+ 可直接写 list[int], dict[str, float]
  • # type: ignore 用于忽略特定行的类型检查。
  • TypeVar, Generic 用于定义泛型类。

5. 魔法方法与协议(Special Methods & Protocols)

  • 常见魔法方法:

    • 构造与表示:__init__, __new__, __repr__, __str__
    • 容器行为:__len__, __getitem__, __setitem__, __contains__
    • 可调用与迭代:__call__, __iter__, __next__
    • 运算符重载:__add__, __eq__, __lt__
    • 上下文管理:__enter__, __exit__
  • 协议(Protocol):结构化子类型,只要实现签名即可视为该类型。

额外补充

  • 自定义上下文管理器:支持 with 语句。
  • 自定义迭代器:实现 __iter____next__

6. 代码组织与项目结构

my_project/
├── src/ # 源码目录
│ └── my_package/
│ ├── __init__.py
│ ├── core.py
│ └── utils.py
├── tests/ # 单元测试
│ └── test_core.py
├── docs/ # 文档(Sphinx / MkDocs)
├── configs/ # 配置文件(yaml/json)
├── requirements.txt
├── pyproject.toml # Poetry / PEP 517
└── .github/workflows/ # CI 配置

额外补充

  • 分层:api/, service/, repository/, models/
  • 包含 __all__ 控制 from module import *

7. 大型项目常用操作模式

  1. 日志记录(Logging)logging.getLogger(__name__) + 配置 Handler
  2. 配置管理pydantic, dataclasses, 环境变量加载。
  3. 测试pytest + fixtures + mock
  4. 静态检查mypy, flake8, isort, black
  5. 依赖管理poetry, pipenv
  6. CI/CD:GitHub Actions / GitLab CI。
  7. 文档生成Sphinx + autodoc / MkDocs
  8. 数据库/ORMSQLAlchemy, Django ORM, asyncpg
  9. 异步编程asyncio, aiohttp, FastAPI
  10. 缓存redis, memcached
  11. 任务队列Celery, RQ
  12. 监控Prometheus, Sentry
  13. 打包分发setuptools, twine

如有更多场景(如元类、AST 操作、性能调优、C 扩展等)可继续补充。

Python 常见规范与高阶模式的更多相关文章

  1. 【python】python函数式编程、高阶函数

    1.map() : python内置的高阶函数,接收一个函数f和一个list,并通过把函数f依次作用在list的每个元素上,得到一个新的list并            返回. def f(x): r ...

  2. python 函数式编程:高阶函数,map/reduce

    python 函数式编程:高阶函数,map/reduce #函数式编程 #函数式编程一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数 #(一)高阶函数 f=abs f print ...

  3. python入门16 递归函数 高阶函数

    递归函数:函数内部调用自身.(要注意跳出条件,否则会死循环) 高阶函数:函数的参数包含函数 递归函数 #coding:utf-8 #/usr/bin/python """ ...

  4. python内置常用高阶函数(列出了5个常用的)

    原文使用的是python2,现修改为python3,全部都实际输出过,可以运行. 引用自:http://www.cnblogs.com/duyaya/p/8562898.html https://bl ...

  5. python高级特性和高阶函数

    python高级特性 1.集合的推导式 列表推导式,使用一句表达式构造一个新列表,可包含过滤.转换等操作. 语法:[exp for item in collection if codition] if ...

  6. python(内置高阶函数)

    1.高阶函数介绍: 一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),如果满足其一,则为高阶函数. 常见的高阶函数:map().sorted( ...

  7. Python之路 day3 高阶函数

    #!/usr/bin/env python # -*- coding:utf-8 -*- #Author:ersa """ 变量可以指向函数,函数的参数能接收变量, 那么 ...

  8. Python 编程基础之高阶函数篇(一)

      高阶函数:能接受函数作为参数的函数. 如: f=abs def   add(x,y,f): return f(x)+f(y) 如果我们用:add(-5,9,f)来调用该高阶函数,则返回结果为:14 ...

  9. python进阶学习之高阶函数

    高阶函数就是把函数当做参数传递的一种函数, 例如: 执行结果: 1.map()函数 map()接收一个函数 f 和一个list, 并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 l ...

  10. [ python ] 匿名函数和高阶函数

    匿名函数 描述:    关键字 lambda 定义的函数    语法: 函数名 = lambda 参数:返回值 返回值:    函数返回结果值 实例: 一个参数的匿名函数: func = lambda ...

随机推荐

  1. SciTech-AV-Video-DVP(Digital Video Processing)-CV/CG-ffmpeg-剪切/格式转换 & 视频拆帧图 & 图片合成视频 & 拼接 & time duration 格式 & 时间 起始点 时长 及 帧数设置

    FFmpeg Image/Video/Audio Processing 按帧截图, 图片合成视频, 视频格式转换, 视频拼接: video_file = 'Cartier.flv' cmd_probe ...

  2. Windows11正式版如何设置电脑自动开机的问题

    有很多雨林木风系统的用户都不知道如何设置电脑自动启动吧?其实,这个问题很容易解决的,本文中,我们雨林木风小编就来分享Windows 11正式版设置电脑自动开机的方法.让我们看看吧. 在 Win11 电 ...

  3. CM 2-2 学习文章

    置换介绍 定义:\(p_1, \cdots, p_n\) 是 \(1 - n\) 的排列,则 \(\pi = \begin{pmatrix} 1 & 2 & \cdots & ...

  4. Swgger3 接入

    接入 引入依赖 引用 Knife4j 的 starter <dependency> <groupId>com.github.xiaoymin</groupId> & ...

  5. 【转】-synchronized与Lock的区别与使用

    详解synchronized与Lock的区别与使用 该博客转载自​淳安郭富城​的​详解synchronized与Lock的区别与使用 1. 引言: 昨天在学习别人分享的面试经验时,看到Lock的使用. ...

  6. Oracle应用之批量递增更新数据脚本

    需求:更新用户表的工号,格式为"GD1,GD2,..."的格式,如果有数据取最大值再递增 E1:先查询出是否有数据,有数据取最大值再递增,使用nvl函数 /* 查询max值*/ s ...

  7. 最强ORM让你开发效率提升百倍

    最强ORM让你开发效率提升百倍 easy-query在经过2年的迭代目前已经在查询领域可以说是无敌的存在,任何orm都不是对手,这几年的功能点简单罗列一下 [x] 动态join:查询涉及到对应的关系表 ...

  8. Function AI 助力用户自主开发 MCP 服务,一键上云高效部署

    在 AI 与云原生协同创新的浪潮下,多模型.多场景智能应用日益普及.开发者面临的首要挑战,是如何实现模型之间.服务之间的高效协同,以及如何便捷地将自主研发能力拓展到云端,形成灵活可扩展的智能服务.MC ...

  9. Clion输出中文乱码终极解决方案

    网上大部分方法是在编辑文件时将编码改成GBK,个人认为不太正确.现有一个终极解决的方案,不需要改成GBK. 保存关闭后,按住 Ctrl+Shift+Alt+/ (不够快捷的快捷键-)选中Registr ...

  10. avalonia 部署wsl依赖库

    主要安装包: sudo apt install libgdiplus sudo apt install libice6 sudo apt install libsm6 https://blog.51c ...