在 Python 中,函数名前面加下划线 _ 是一种约定,用于表示不同类型的含义:
1. 单下划线 _:
-
保护变量/函数/方法(Weak "internal use" indicator): 这是一种约定,表示该变量/函数/方法是供内部使用的。它并不会真正阻止外部访问,但它向其他开发者暗示了不应该直接访问或修改这个变量/函数/方法。例如:
def _internal_function():
# ...
class MyClass:
def _private_method(self):
# ...
_internal_variable = 10
-
在交互式解释器中存储上次表达式的结果: 在交互式解释器(例如 Python REPL)中,_ 会存储上次执行的表达式的结果。
>>> 1 + 2
3
>>> _
3
>>> _ * 2
6
content_copyUse code with caution.Python
-
忽略值: 在循环或元组拆包中,可以用 _ 来忽略不需要的值。
for _ in range(5):
# ...
x, _, z = (1, 2, 3) # 忽略第二个值
-
国际化 (i18n): 有时 _ 函数被用作 gettext 模块的快捷方式,用于翻译字符串。
2. 双下划线 __ (Name Mangling):
-
防止命名冲突 (Name Mangling): 双下划线 __ 会触发 Python 的名称改写机制(name mangling)。它会将变量/方法的名称改写成 _ClassName__variableName 的形式,以避免在继承时出现命名冲突。这使得子类可以定义与父类同名的变量/方法,而不会覆盖父类的实现。例如:
class MyClass:
def __private_method(self):
print("MyClass.__private_method()")
class SubClass(MyClass):
def __private_method(self): # 实际上定义的是 _SubClass__private_method
print("SubClass.__private_method()")
3. 单下划线后跟双下划线 _ (Special methods or "dunder" methods):
-
特殊方法(Magic Methods/Dunder Methods): 以双下划线开头和结尾的方法,例如 __init__、__str__、__len__ 等。这些方法具有特殊的含义,用于定义类的行为,例如对象的初始化、字符串表示、长度等等。 不应该直接调用这些方法,而是通过 Python 的内置函数或操作符来间接调用。
总结:
下划线 | 含义 |
_ | 保护成员,忽略值,交互式解释器中存储上次结果,国际化 |
__ | 名称改写,防止命名冲突 |
__...__ | 特殊方法(魔法方法/双下划线方法) |