0

有没有办法从根级主应用程序导入包中的所有模块,并在 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

这很好,因为它让我可以function1()从 main.py调用。单独从 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)

我已经阅读了Python 3 关于 modules 和 packages 的文档。想法/帮助表示赞赏。

4

1 回答 1

1

最好的折衷方案似乎在导入时重命名:

import package.module as mod

mod.function(param)

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

于 2017-12-27T22:34:05.927 回答