Python语言基础知识详解:标识符与变量
Python语言基础知识详解:标识符与变量
一、标识符(Identifiers)
定义
标识符是用于命名变量、函数、类、模块或其他对象的名称。它是代码中对实体的唯一标识。
1. 标识符的命名规则
Python的标识符需遵循以下规则:
-
允许的字符
- 由字母(A-Z, a-z)、数字(0-9)和下划线(
_
)组成。 - 必须以字母或下划线开头,不能以数字开头。
- 区分大小写:
name
、Name
、NAME
是三个不同的标识符。
valid_names = ["age", "_count", "user1", "MAX_VALUE"] # 合法 invalid_names = ["2nd_var", "my-var", "class"] # 非法(数字开头、特殊字符、保留字)
- 由字母(A-Z, a-z)、数字(0-9)和下划线(
-
保留关键字(Keywords)
Python有35个保留关键字,不可作为标识符。例如:# 查看所有关键字 import keyword print(keyword.kwlist) # ['False', 'None', 'True', 'and', 'as', 'assert', ...]
-
命名约定
- PEP8规范:Python官方推荐的代码风格指南。
- 变量名:小写字母 + 下划线分隔(
snake_case
),如user_name
。 - 常量名:全大写 + 下划线分隔,如
MAX_SIZE
。 - 类名:首字母大写的驼峰式(
CamelCase
),如ClassName
。 - 函数名:同变量名,如
calculate_total()
。
- 变量名:小写字母 + 下划线分隔(
- 避免混淆:
- 不要使用小写
l
、大写O
等易混淆字符。 - 避免单下划线开头(
_var
)或双下划线开头(__var
)的特殊含义名称(除非明确用途)。
- 不要使用小写
- PEP8规范:Python官方推荐的代码风格指南。
2. 标识符的作用域与生命周期
- 作用域:标识符的有效范围(局部、全局、闭包)。
- 生命周期:标识符从创建到销毁的时间段,由作用域决定。
二、变量(Variables)
定义
变量是程序运行时存储在内存中的数据的引用(即标识符指向具体对象)。
1. 变量的声明与赋值
Python是动态类型语言,变量无需显式声明类型,直接赋值即可创建。
-
单变量赋值
a = 10 # 整型变量 name = "Alice" # 字符串变量 is_valid = True # 布尔型变量
-
多变量赋值
x, y, z = 1, 2, 3 # 同时赋值多个变量 a = b = c = 0 # 链式赋值(所有变量指向同一对象) x, y = y, x # 交换变量值(无需临时变量)
-
变量类型动态变化
var = 10 # 初始为整型 var = "Hello" # 重新赋值为字符串(合法)
2. 变量的本质:对象引用
Python变量本质是对象的引用(指针),而非存储数据本身。
- 不可变对象:赋值会创建新对象(如
int
,str
,tuple
)。 - 可变对象:赋值共享同一对象(如
list
,dict
,set
)。
# 不可变对象示例
a = 10
b = a # b和a指向同一个整数对象
a = 20 # 创建新对象20,a指向新对象,b仍为10# 可变对象示例
list1 = [1, 2]
list2 = list1 # list2和list1指向同一列表
list1.append(3) # 修改原列表,list2同步变化
print(list2) # 输出 [1, 2, 3]
3. 变量的作用域
Python作用域分为四层(由内到外):
- 局部作用域(Local):函数内部定义的变量。
- 闭包作用域(Enclosing):嵌套函数的外层作用域。
- 全局作用域(Global):模块级别定义的变量。
- 内建作用域(Built-in):Python内置的标识符(如
print
,len
)。
global_var = "Global" # 全局变量def outer():enclosing_var = "Enclosing" # 闭包作用域变量def inner():local_var = "Local" # 局部变量print(global_var) # 访问全局变量print(enclosing_var) # 访问闭包变量inner()outer()
global
关键字:在函数内部修改全局变量。nonlocal
关键字:在嵌套函数中修改闭包变量。
count = 0 # 全局变量def increment():global countcount += 1 # 修改全局变量def outer():x = 10def inner():nonlocal x # 声明x为闭包变量x += 5inner()print(x) # 输出15
4. 变量的内存管理
- 引用计数:Python通过引用计数自动回收内存。当引用计数为0时,对象被销毁。
- 垃圾回收(GC):处理循环引用等复杂情况。
import sys
a = []
print(sys.getrefcount(a)) # 输出引用计数(通常比实际多1)
三、常见问题与最佳实践
-
变量命名常见错误
- 使用保留字(如
class = 10
)。 - 使用无意义的名称(如
a
,x1
)。 - 大小写混淆(如
UserName
vsuserName
)。
- 使用保留字(如
-
变量作用域陷阱
- 未声明
global
直接修改全局变量(导致创建局部变量)。 - 闭包中未正确使用
nonlocal
。
- 未声明
-
最佳实践
- 明确性:变量名应清晰描述其用途(如
student_list
优于s
)。 - 避免全局变量:优先使用局部变量或类属性。
- 类型提示(Type Hints):Python 3.5+支持类型注解,增强代码可读性。
def greet(name: str) -> str:return f"Hello, {name}"
- 明确性:变量名应清晰描述其用途(如
四、总结
核心概念 | 关键点 |
---|---|
标识符规则 | 字母/下划线开头,区分大小写,避开保留字,遵循PEP8命名规范。 |
变量的本质 | 对象引用,动态类型,支持多变量赋值。 |
作用域管理 | 局部 > 闭包 > 全局 > 内建,使用 global 和 nonlocal 控制作用域。 |
内存管理 | 引用计数 + 垃圾回收机制,自动管理内存。 |
最佳实践 | 明确命名、避免全局污染、合理使用类型提示。 |
掌握标识符与变量的细节,是编写高效、可维护Python代码的基础。通过合理的命名和变量管理,能显著提升代码的可读性和协作效率。