Python 函数前的下划线

Posted sin(豪)

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()。

以上是关于Python 函数前的下划线的主要内容,如果未能解决你的问题,请参考以下文章

python 类的书写和实例化

Python 中下划线

Swiftui 中 init() 中变量前的下划线是啥意思?

变量名前的下划线“_”对 Flutter 意味着啥

Python 私有变量中两个下划线 _ _item 与 一个下划线的区别 _item

Linux Kernel中函数命名