你不了解的Python冷知识__all__的作用/模块导入

Posted 算法与编程之美

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你不了解的Python冷知识__all__的作用/模块导入相关的知识,希望对你有一定的参考价值。

问题

Python编程时,涉及到多模块的复杂编程时,经常会看到变量__all__,那么该变量的作用是什么呢?

方法

新建一个func.py文件,编写两个简单函数foo和_bar,如下:

def foo():
    print('foo')
    
def _bar():
    print('bar')

新建一个test.py文件,测试导入。

from func import *

foo()
_bar()

运行后,发现foo()可以正常调用,而_bar()则报错。

以上表明,当以下划线"_"开头的变量、函数、类在进行导入时,均为私有,因此,如果想设置某变量/函数/类导出后不可见,可按照此法。

假如,我对下划线开头的命令方式十分敏感,那么可有其他方式代替,答案就是__all__,只需要在__all__变量中指明需要导出的元素即可,如下所示:

def foo():
    print('foo')
    
def _bar():
    print('bar')
    
    
def foobar():
    print('foobar')
    
def barfoo():
    print('barfoo')
    

__all__ = ['foobar', '_bar']

下面调用:

from func import *
 
foo() # 出错
_bar() # 即使是_开头,只要__all__中指出,依然可用

foobar()

结语

关于__all__,如果没有上述简洁明了的介绍,真正遇到了,还真搞不明白!希望本文对你能有所帮助。

以上是关于你不了解的Python冷知识__all__的作用/模块导入的主要内容,如果未能解决你的问题,请参考以下文章

Python 中 __all__ 的作用

python模块中的_all__属性的作用

python模块中的_all__属性的作用

你不了解的Python冷知识序列解包/列表前加星号*list

__all__ 作用, 相当于导入*

关于python 的__init__.py 以及 __all__ 的用法