为什么 Python 不建议使用下划线开头的标识符?
为什么 Python 不建议使用下划线开头的标识符?
在 Python 中,标识符是变量、函数、类等命名的标记符。虽然 Python 允许使用下划线开头的标识符,但一般情况下并不建议这样做,除非有特定的用途。本文将详细解释为什么 Python 不建议使用下划线开头的标识符,并结合实例代码帮助你更好地理解这一点。
一、单下划线 _
的用途
单下划线 _
在 Python 中有特定的用途,主要有以下几种:
1. 用作临时变量
在循环或解构赋值时,单下划线 _
常被用作临时变量,表示不关心的值。例如:
# 在循环中用作临时变量
for _ in range(5):
print("Hello, World!")
输出结果为:
Hello, World!
Hello, World!
Hello, World!
Hello, World!
Hello, World!
2. 在交互式解释器中表示上一个表达式的结果
在 Python 的交互式解释器中,单下划线 _
表示上一个表达式的结果。例如:
>>> 5 + 3
8
>>> _
8
3. 用作国际化函数的名称
在国际化(i18n)中,单下划线 _
通常用作函数名来获取翻译文本。例如:
import gettext
_ = gettext.gettext
print(_("Hello, World!"))
二、单下划线开头 _var
的用途
单下划线开头的标识符通常用于表示“内部使用”或“保护的”变量或方法,尽管它并不会真正限制访问。例如:
class MyClass:
def __init__(self):
self._internal_var = 42
# 实例化对象
obj = MyClass()
print(obj._internal_var) # 输出:42
1. 约定俗成的“内部使用”
虽然以单下划线开头的变量仍然可以被外部访问,但它是一种约定,表示该变量或方法不应该被外部代码使用。这有助于代码的可读性和维护性。
2. 避免与关键字冲突
单下划线开头的标识符还可以避免与 Python 的关键字发生冲突。例如:
class_ = "Math" # 避免与关键字 class 冲突
print(class_)
三、双下划线开头 __var
的用途
双下划线开头的标识符用于名称改写(name mangling),以避免子类覆盖。例如:
class Base:
def __init__(self):
self.__private_var = 42
class Derived(Base):
def __init__(self):
super().__init__()
self.__private_var = 100
# 实例化对象
obj = Derived()
print(obj.__dict__) # 输出:{'_Base__private_var': 42, '_Derived__private_var': 100}
1. 名称改写机制
双下划线开头的标识符在类定义中会被改写,以防止子类覆盖。例如,__private_var
在类 Base
中会被改写为 _Base__private_var
。
2. 避免名称冲突
名称改写可以有效避免在继承链中的名称冲突,使得子类可以安全地定义自己的变量而不影响基类的实现。
四、总结
虽然 Python 允许使用下划线开头的标识符,但不建议滥用这些约定。合理使用单下划线和双下划线,可以提高代码的可读性和可维护性。在实际编程中,遵循这些约定有助于更好地理解和管理代码。
License:
CC BY 4.0