有没有办法从根级主应用程序导入包中的所有模块,并在Python 3中立即提供模块中的功能?这是一个示例文件树:
+app
|- __init__.py
|- main.py
|+ package
|- __init__.py
|- module.py #(contains function1, function2 and function 3)
我想避免在main.py中使用以下import语句(对于复杂的应用程序,它可能会变得冗长而邋)):
from package.module import function1, function2, function3
这很好,因为它让我从main.py调用function1()
。仅从package.module导入函数意味着我必须调用函数的完整目录以在我的脚本中使用它(或在新函数中将其别名)。例如:
import package.module
package.module.function(param)#not fun...too long!
#or like this
def newFunction(param):
'''why create a new function to handle an already existing one?
Bad form and non Pythonic'''
return package.module.function(param)
如果我在我的包裹的__all__ = ["module1", "module2"]
中包含__init__.py
,那意味着我必须执行以下操作:
from package import * #it is said this is bad form as well
module.function(param)
#I just want the function and don't want to call module also
我的目标是导入包和模块,然后充分利用模块中的所有功能,而无需在每次要使用该功能时显式调出包和模块。按照以下思路思考:
import package.module
function1(x)
我读过documentation for Python 3 about modules and packages。感谢您的想法/帮助。
最好的妥协似乎在导入时重命名:
import package.module as mod
mod.function(param)
输入三个字母应该足够短。同时导入是合格的,并且不会像*
导入那样污染您的全局名称空间。您可以自由使用mod
的任何名称。即使是一个单字母的名字也行。但建议在名称中至少包含三个字母。