随便拿一份Python代码,几乎都可以看到很多“_”的身影。
在Python中,下划线(_)有多种用途和含义,具体取决于它们的位置和使用方式。在这里都列举出来方便大家对照查看:
1. __xxx__(双下划线前后)
这种形式通常用于特殊方法和属性,也称为“魔法方法”或“双下划线方法”。这些方法和属性是Python内置的,具有特殊的含义和用途。例如:
- __init__:类的初始化方法。
- __str__:返回对象的字符串表示形式。
- __len__:返回对象的长度。
- __add__:定义对象的加法行为。
1
2
3
4
5
6
7
8
9
|
class MyClass:
def __init__(self, value):
self.value = value
def __str__(self):
return f"MyClass with value {self.value}"
obj = MyClass(10)
print(obj)
# 输出: MyClass with value 10
|
2. _xxx(单下划线前缀)
单下划线前缀通常用于表示内部变量或方法,提示开发者这些变量或方法是内部实现的一部分,不应该直接访问或修改。这是一种命名约定,并不会真正限制访问。
1
2
3
4
5
6
7
8
9
|
class MyClass:
def __init__(self, value):
self._internal_value = value
def get_value(self):
return self._internal_value
obj = MyClass(10)
print(obj._internal_value) # 输出: 10
|
3. xxx_(单下划线后缀)
单下划线后缀通常用于避免与Python关键字冲突。例如,如果你有一个变量名与Python关键字冲突,可以使用单下划线后缀来避免冲突。
1
2
3
|
class_ = "MyClass"
print(class_)
# 输出: MyClass
|
4. __xxx(双下划线前缀)
双下划线前缀会触发名称修饰(name mangling),将变量或方法名修改为_ClassName__xxx,以避免子类意外覆盖父类的私有变量或方法。这种方式提供了一种弱的“私有”机制。
1
2
3
4
5
6
7
8
9
|
class MyClass:
def __init__(self, value):
self.__private_value = value
def get_value(self):
return self.__private_value
obj = MyClass(10)
print(obj._MyClass__private_value) # 输出: 10
|
5. _(单下划线)
单下划线通常用作临时变量或忽略变量的占位符。例如,在循环中忽略循环变量,或在解包时忽略某些值。
1
2
3
4
5
|
for _ in range(5):
print("Hello")
a, _, c = (1, 2, 3)
print(a, c) # 输出: 1 3
|
6. __(双下划线)
双下划线通常不单独使用,但在某些情况下可能会出现在特殊方法或属性中。例如,__all__用于定义模块的公共接口。
1
|
__all__ = ["MyClass", "my_function"]
|
7. _xxx_(单下划线前后)
这种形式通常不常见,但有时用于表示内部变量或方法,类似于单下划线前缀。
1
2
3
4
5
6
7
8
|
class MyClass:
def __init__(self, value):
self._value_ = value
def get_value(self):
return self._value_
obj = MyClass(10)
print(obj._value_) # 输出: 10
|
总结
- __xxx__:特殊方法和属性。
- _xxx:内部变量或方法。
- xxx_:避免与Python关键字冲突。
- __xxx:名称修饰,提供弱的“私有”机制。
- _:临时变量或忽略变量的占位符。
- __:通常不单独使用,但在特殊方法或属性中可能出现。
- _xxx_:内部变量或方法,类似于单下划线前缀。
顺便提一下其他的除了运算符以外的常见符号:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# 注释
a = [1, 2, 3] # 列表
b = (1, 2, 3) # 元组
c = {1, 2, 3} # 集合
d = {'a': 1, 'b': 2} # 字典
# 函数调用
def my_function(x):
return x + 1
print(my_function(5)) # 输出: 6
# 切片
print(a[1:3]) # 输出: [2, 3]
# 集合操作
e = {3, 4, 5}
print(c | e) # 输出: {1, 2, 3, 4, 5}
print(c & e) # 输出: {3}
print(c - e) # 输出: {1, 2}
print(c ^ e) # 输出: {1, 2, 4, 5}
|
- #:注释
- \:续行符
- @:装饰器
- ::用于切片、字典键值对、函数定义、类定义等
- .:属性访问
- ,:元组和参数分隔符
- ;:语句分隔符(通常不推荐使用)
- ():元组、函数调用、优先级
- []:列表、索引、切片
- {}:字典、集合
- |:集合并集
- &:集合交集
- -:集合差集
- ^:集合对称差集
|