引言
很多时候写代码,总是会遇到有人使用 __all__()
方法,本人每次读到都会比较困惑,这里特来记录一下这个的用法。
正文
比如我们这里有一个文件,名为 all.py
,其中代码如下:
a = 1
b = 1
我们又有另外一个文件,其名称为 alls.py
。其代码如下:
from all import *
print(a)
print(b)
"""
result:
1
1
"""
由于在 all.py
中定义了 a
和 b
变量,因此,我们可以在 alls.py
中使用 from all import *
导入 all.p
y 中所有的变量,然后进行打印就可以得到对应的结果。
那么如果此时我们在 all.py
中加入 __all__
的定义,如下:
__all__ = ['a']
a = 1
b = 1
再次打印我们来看一下结果:
from all import *
print(a)
print(b)
"""
result:
1
Traceback (most recent call last):
File "C:\Softwares\PythonProject\HGXS_DataProcessing\alls.py", line 10, in <module>
print(b)
^
NameError: name 'b' is not defined
"""
此时,我们看到,提示我们 b
变量没有被定义,因为我们定义的 __all__ = ['a']
中只有 a
变量,而没有 b
变量。通过这个示例说明,__all__
实际对应于 from all import *
中的 *
。
但是本人认为,__all__
并没有实际意义,因为在导入模块中,我们不推荐使用 from all import *
的形式,这种导入方式会引入一些可能无法预测的问题,因此,这个知识点大家了解即可。对于 __all__
,它也可以用来存放函数或者类对象。读者可自行探索。
如果大家觉得有用,就请点个赞吧~