程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Python 基础

    • Python基础
  • Python 进阶

    • 装饰器与生成器
    • 异常处理
    • 标准库精讲
    • 模块与包
    • pip包管理工具
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
前端 (opens new window)
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Python 基础

    • Python基础
  • Python 进阶

    • 装饰器与生成器
    • 异常处理
    • 标准库精讲
    • 模块与包
    • pip包管理工具
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
前端 (opens new window)
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • Python 基础

    • 环境搭建
    • 标识符
      • 1. 什么是标识符?
      • 2. 硬性语法规则:不可逾越的红线
        • 2.1 字符构成
        • 2.2 开头字符
        • 2.3 大小写敏感
        • 2.4 关键字规避
      • 3. PEP 8 命名规范:社区的优雅约定
      • 4. 特殊下划线命名约定
      • 5. 命名最佳实践与常见误区
        • 5.1 语义清晰,避免歧义
        • 5.2 避免覆盖内置函数
        • 5.3 统一风格,保持一致
      • 6. 标识符命名速查表
    • 变量
    • 缩进和注释
    • 数据类型
    • 数据类型转换
    • 运算符
    • 字符串
    • 列表
    • 元组
    • 字典
    • 集合
    • if判断
    • for循环
    • while循环
    • 循环综合练习
    • Python函数
    • 函数与循环实战
    • 生成式
    • 文件读写
    • 面向对象
    • 面向对象综合案例
  • Python 进阶

  • Python
  • Python 基础
scholar
2025-07-20
目录

标识符

# 标识符

在 Python 的世界里,我们为变量、函数、类等几乎所有东西所起的名字,统称为 标识符 (Identifier)。一个好的标识符就像一个清晰的路牌,能引导我们轻松理解代码的意图。本指南将带你从最基础的语法规则到社区公认的最佳实践,全面掌握标识符的命名艺术。


# 1. 什么是标识符?

简单来说,标识符就是程序员给代码实体起的名字。

  • 它的作用:作为程序中某个实体的唯一“身份证”,让我们能够方便地引用它。
  • 它的应用:变量名、函数名、类名、模块名、常量名等都是标识符。
# 'student_name' 是一个变量标识符
student_name = "张三"

# 'calculate_area' 是一个函数标识符
def calculate_area(radius):
    pass

# 'Circle' 是一个类标识符
class Circle:
    pass
1
2
3
4
5
6
7
8
9
10

# 2. 硬性语法规则:不可逾越的红线

以下是 Python 语言强制规定的语法,必须严格遵守,否则程序会立即抛出 SyntaxError 错误。

# 2.1 字符构成

  • 合法字符:只能包含 英文字母 (a-z, A-Z)、数字 (0-9) 和 下划线 (_)。
  • 非法字符:严禁使用空格、连字符 (-)、@、#、$ 等任何其他特殊符号。
# ✅ 合法示例
user_name
age18
_internal_data

# ❌ 非法示例
# user-name  # 包含连字符
# user age   # 包含空格
# user@      # 包含特殊符号
1
2
3
4
5
6
7
8
9

# 2.2 开头字符

  • 标识符的 第一个字符不能是数字。
  • 必须以 字母 或 下划线 (_) 开头。
# ✅ 合法示例
name1
_1st_place # 合法,但不推荐

# ❌ 非法示例
# 1st_place
# 2_users
1
2
3
4
5
6
7

# 2.3 大小写敏感

  • Python 是 大小写敏感 的。name、Name 和 NAME 会被视为三个完全不同的标识符。
age = 20
Age = 30
print(age) # 输出: 20
1
2
3

为避免混淆,强烈建议在项目中保持统一的大小写风格。

# 2.4 关键字规避

  • Python 的 关键字 (Keywords) 是语言保留的特殊词汇,绝对不能用作标识符。

如何查看所有关键字?

import keyword
print(keyword.kwlist)
1
2
# ❌ 非法示例: 使用关键字
# class = "我的班级"
# def = "我的函数"
# return = "返回值"

# ✅ 正确的规避方法: 在名称后添加下划线或更换描述
class_name = "我的班级"
return_value = "返回值"
1
2
3
4
5
6
7
8

# 3. PEP 8 命名规范:社区的优雅约定

PEP 8 是 Python 官方的代码风格指南。遵循它并非强制,但这是社区的共识,能让你的代码更专业、更易于他人阅读。

标识符类型 命名风格 示例
变量、函数、方法 snake_case (蛇形命名法) student_name, calculate_average()
类 (Class) PascalCase (帕斯卡命名法) StudentInfo, DatabaseManager
常量 (Constant) UPPER_SNAKE_CASE (全大写蛇形) MAX_USERS, DEFAULT_TIMEOUT
模块 (Module) all_lowercase (全小写) math_utils.py, config.py
# 常量
MAX_CONNECTIONS = 10
API_KEY = "SECRET_KEY"

# 变量
user_name = "Alice"
is_logged_in = True

# 函数
def send_notification(user, message):
    # ... 函数体 ...
    pass

# 类
class UserProfile:
    # ... 类体 ...
    pass
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 4. 特殊下划线命名约定

下划线在 Python 命名中扮演着特殊的角色,它们是重要的“约定”,向其他开发者传达特定意图。

模式 名称 含义与用途
_single_leading 单前导下划线 内部使用约定。表示这是一个“受保护”的变量或方法,不希望被外部直接调用。这只是一种君子协定,Python 本身不阻止访问。
__double_leading 双前导下划线 私有成员。当用在类属性中时,会触发 Python 的“名称改写(Name Mangling)”,使其在外部极难被意外访问。
__double__ 双前导和双结尾 魔术方法/属性。由 Python 官方定义和使用的特殊名称,用于实现特定功能(如 __init__, __str__)。永远不要自己发明这种格式的名称。
_ 单独下划线 临时或无关紧要的变量。常用于表示某个值被刻意忽略。
class MyClass:
    def __init__(self):
        self.public = "公开的"
        self._protected = "受保护的"
        self.__private = "私有的"

    def __str__(self): # 魔术方法
        return "MyClass Instance"

# 临时变量
for _ in range(5):
    print("循环,但不需要索引")
1
2
3
4
5
6
7
8
9
10
11
12

# 5. 命名最佳实践与常见误区

# 5.1 语义清晰,避免歧义

  • 名字应能准确反映其用途,即 “见名知意”。
  • 函数名应以 动词 开头,体现其行为,如 get_user(), calculate_sum()。
  • 布尔变量应以 is_, has_, can_ 等开头,使其读起来像一个判断题。
# ❌ 糟糕的命名
temp = 25       # temp 是什么?温度?临时变量?
flag = True     # flag 代表什么状态?
data = get_data() # get_data 是从哪里获取数据?

# ✅ 优秀的命名
temperature_celsius = 25
is_user_active = True
def fetch_data_from_database():
    pass
1
2
3
4
5
6
7
8
9
10

# 5.2 避免覆盖内置函数

切勿 使用 Python 的内置函数名(如 list, dict, str, id, sum 等)作为你的标识符。这会覆盖它们的原有功能,导致非常隐蔽且难以调试的错误。

# ❌ 灾难性的错误
list = [1, 2, 3]
# ... 后来 ...
# new_tuple = list((4, 5, 6)) # TypeError: 'list' object is not callable
1
2
3
4

# 5.3 统一风格,保持一致

在一个项目或团队中,应始终坚持同一种命名风格。如果项目中大部分代码使用 user_id,就不要在新的代码中引入 userID。


# 6. 标识符命名速查表

类型 推荐规范 (PEP 8) 正确示例 ✅ 错误或不推荐 ❌
普通变量 snake_case user_name, age UserName, user-name, str
布尔变量 is_, has_ 等前缀 is_active, has_permission active, permission_flag
常量 UPPER_SNAKE_CASE MAX_SIZE, API_KEY max_size, MaxSize
函数/方法 snake_case get_user_info(), _internal_func() GetUserInfo(), user_info()
类 PascalCase Student, DatabaseManager student, database_manager
模块 all_lowercase utils.py, api_client.py Utils.py, api-client.py
魔术方法 __double__ __init__, __str__ _init_, my_method
编辑此页 (opens new window)
上次更新: 2025/07/23, 06:33:16
环境搭建
变量

← 环境搭建 变量→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式