当一个软件包变得很大时,很难记住每个对象的位置,而且要找到我们想要的对象也很麻烦。作者似乎通过将对“最佳”对象的引用置于顶部来解决这个问题,尽管它们的代码实际上可能存在于几个软件包级别下面。
这样可以让我们这样说:
这样可以让我们这样说:
from pandas import wide_to_long
替代
from pandas.core.reshape.melt import wide_to_long
但是这种方法的具体细节及最佳实践是什么?在顶层的 __init__.py
中加载大量导入(以使它们在顶层可用)是否意味着任何一个单一对象的导入会比需要的内存多得多,因为在 __init__.py
中提到的所有内容都会自动加载?
然而,某些包确实采用了这种方法。例如,下面的顶层 numpy
或 pandas
可以导入的内容(可以在此Gist中找到运行您自己的诊断代码)。
$ python print_top_level_diagnosis.py numpy
--------- numpy ---------
599 objects can be imported from top level numpy:
19 modules
300 functions
104 types
depth count
0 162
1 406
2 2
3 29
4 1
$ python print_top_level_diagnosis.py pandas
--------- pandas ---------
115 objects can be imported from top level pandas:
12 modules
55 functions
40 types
depth count
0 12
3 37
4 65
5 1