如何使用Python3中的根应用程序立即使用包模块中的函数

时间:2017-12-27 22:26:21

标签: python-3.x packages python-module filetree

有没有办法从根级主应用程序导入包中的所有模块,并且在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。感谢思考/帮助。

1 个答案:

答案 0 :(得分:1)

最好的妥协似乎在导入时重命名:

import package.module as mod

mod.function(param)

输入三个字母应该足够短。同时导入是合格的,不会像*导入那样污染您的全局名称空间。 您可以mod使用任何名称。即使是一个单字母的名字也行。 但建议在名称中至少包含三个字母。