欢迎访问宙启技术站
智能推送

Python中使用单下划线(_)和双下划线(__)的区别

发布时间:2023-12-18 15:49:50

在Python中,单下划线(_)和双下划线(__)都是用于标识符的特殊含义和用途。下面将详细介绍它们的区别和使用例子。

1. 单下划线(_)的用途:

在Python中,单下划线(_)有以下几个常见的用途:

1.1 用作临时变量:

当我们不关心一个变量的值时,可以将其命名为单下划线(_)。这可以让其他人明白该变量是被忽略的,并且不用关心它的值。

例如:

for _ in range(5):
    print("Hello")  # 重复输出5次Hello,但不需要使用循环变量的值

1.2 用作私有属性或方法:

在Python中,没有真正的私有属性或方法。但是,当我们使用单下划线(_)作为属性或方法的前缀时,表明该属性或方法是私有的,不应该在类或模块外部访问。

例如:

class MyClass:
    def __init__(self):
        self._private_var = 10   # 私有属性

    def _private_method(self):
        print("This is a private method")   # 私有方法

obj = MyClass()
print(obj._private_var)   # 仍然可以访问私有属性,但通常不建议这样做
obj._private_method()   # 仍然可以调用私有方法,但通常不建议这样做

1.3 用作特殊变量名:

在Python中,当我们定义一个函数的参数,但不打算使用该参数时,可以将其命名为单下划线(_)。

例如:

def my_function(_, b):
    print(b)

my_function(10, 20)   # 输出20

2. 双下划线(__)的用途:

在Python中,双下划线(__)有以下几个常见的用途:

2.1 名称修饰(Name Mangling):

双下划线(__)用于名称修饰,这意味着它将在类定义内部改变变量的名称。

例如:

class MyClass:
    def __init__(self):
        self.__private_var = 10   # 名称修饰后,外部不能直接访问该属性

    def __private_method(self):
        print("This is a private method")   # 名称修饰后,外部不能直接调用该方法

obj = MyClass()
print(obj.__private_var)   # 会抛出AttributeError异常,无法直接访问名称修饰后的属性
obj.__private_method()   # 会抛出AttributeError异常,无法直接调用名称修饰后的方法

2.2 魔术方法(Magic Methods):

双下划线(__)用作魔术方法(也称为特殊方法或dunder方法),这些方法在特定的操作或事件发生时自动被调用。

例如:

class MyNumber:
    def __init__(self, value):
        self.value = value

    def __add__(self, other):
        return self.value + other.value

num1 = MyNumber(10)
num2 = MyNumber(20)
print(num1 + num2)   # 输出30,通过魔术方法实现了自定义对象的加法运算

2.3 系统定义的特殊方法:

Python中还有一些系统定义的特殊方法,例如__init____str____len__等。这些方法有特殊的用途,并且会被系统自动调用。

例如:

class Person:
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return f"Person: {self.name}"

    def __len__(self):
        return len(self.name)

person = Person("Alice")
print(person)   # 输出:Person: Alice
print(len(person))   # 输出:5

综上所述,单下划线(_)在Python中用作临时变量、私有属性或方法、特殊变量名;双下划线(__)用于名称修饰和魔术方法。这些下划线在Python中具有特殊的含义和用途,可以增加代码的可读性和可维护性。