【Python 函数前的下划线】

1. 函数前的下划线的分类

Python函数前的下划线分为单下划线和双下划线两种:

# 单下划线
def _add():
	...
	return

# 双下划线
def __add():
	...
	return

2. 两种下划线的区别

种类 区别
单下划线:_add() 是一种私有函数的命名约定,即提示程序员该函数只能在类或者该文件内部使用,但实际上也可以在外部使用。
双下划线__add() 私有函数,只能在内部使用

但是,实际上在使用时,类和文件中的私有函数又有区别。(其实文件中没有私有函数这种说法,只是我类别着类里的私有函数概念来说了。)

例1:只能在类内部使用私有函数

class Compute:
    def __init__(self, a, b):
        self.a = a
        self.b = b

    def add(self):
        print("******** add ********")
        print(f"{
      
      self.a} + {
      
      self.b} = {
      
      self.a + self.b}")
	
	# 单下划线,提示程序员该函数只能在类内部使用
    def _mul(self):
        print("******** _mul ********")
        print(f"{
      
      self.a} x {
      
      self.b} = {
      
      self.a * self.b}")

	# 双下划线,私有函数
    def __div(self):
        print("******** __div ********")
        print(f"{
      
      self.a} / {
      
      self.b} = {
      
      self.a / self.b}")

    def test(self):
        print("******** test ********")
        self.add()
        self._mul()
        self.__div()

if __name__ == '__main__':
    com = Compute(10, 5)
    com.add()
    com._mul()
    com.test()
    com.__div()

结果:
在这里插入图片描述
我们可以看到,可以在外部使用_mul()函数,但不可以使用__div()函数。

例2:只能在文件中使用私有函数
在这里插入图片描述

我们在utils这个python package下创建add.py,其中包含以下代码:

# add.py

def add(a, b):
    print("******** add ********")
    print(f"{
      
      a} + {
      
      b} = {
      
      a+b}")
    return

def __add(a, b):
    print("******** __add ********")
    print(f"{
      
      a} + {
      
      b} = {
      
      a + b}")
    return

def _add(a, b):
    print("******** _add ********")
    print(f"{
      
      a} + {
      
      b} = {
      
      a + b}")
    return

在main.py中包含以下代码:

from utils.add import *

if __name__ == '__main__':
    add(1, 2)
    _add(3, 4)
    __add(5, 6)

运行结果如下:
在这里插入图片描述
在这里插入图片描述
所以从外部既无法访问_add也无法访问__add()。

猜你喜欢

转载自blog.csdn.net/qq_44166630/article/details/127049573