__all__ 通常用于项目中的引用保护。
定义aa.py 文件如下:
def a1():
print('a1 from aa.py')
def a2():
print('a2 from aa.py')
定义bb.py 文件如下:
from aa import *
a1()
a2()
执行bb.py ,得到输出:
a1 from aa.py
a2 from aa.py
将aa.py 修改为
__all__ = ['a1']
def a1():
print('a1 from aa.py')
def a2():
print('a2 from aa.py')
此时执行bb.py ,得到输出:
a1 from aa.py
Traceback (most recent call last):
File "bb.py", line 4, in <module>
a2()
NameError: name 'a2' is not defined
将bb.py 修改为:
from aa import a1, a2
a1()
a2()
执行bb.py ,得到输出:
a1 from aa.py
a2 from aa.py
由此可见__all__ 可以作为一种import 的保护机制,另外from ... import ... 的形式不会受__all__ 的影响。不过在项目中最好还是采用from module import func1, func2 的形式,这样会更加规范,可读性也会更好。
博主会持续更新一些人工智能领域的知识和实践、工作中遇到的问题和感悟、高效工作的方法和技巧,如果喜欢请关注、点赞、收藏支持
|