假设我有以下结构:
app/
__init__.py
foo/
a.py
b.py
c.py
__init__.pya.py、b.py和c.py共享一些公共导入(日志、os、re等)。是否可以从__init__.py文件中导入这三个或四个通用模块,这样我就不必在每个文件中都导入它们?
编辑:我的目标是避免在每个文件中导入5-6个模块,这与性能原因无关。
发布于 2009-07-29 15:33:20
不,它们必须放在每个模块的名称空间中,所以您必须以某种方式导入它们(除非您将logging作为函数参数传递,至少可以说这是一种奇怪的处理方式)。
但是这些模块只导入一次(然后放入a、b和c名称空间),所以不用担心使用太多内存或类似的东西。
当然,您可以将它们放入一个单独的模块中,然后将其导入到每个a、b和c中,但每次都必须导入这个单独的模块。
发布于 2009-07-29 15:38:33
您可以使用通用文件(如include.py )来完成此操作,但这与推荐的做法背道而驰,因为它涉及通配符导入。考虑以下文件:
app/
__init__.py
foo/
a.py
b.py
c.py
include.py <- put the includes here.
__init__.py现在,在a.py等代码中,执行以下操作:
from include import *如上所述,不推荐这样做,因为不鼓励使用通配符导入。
发布于 2009-07-29 15:51:04
是的,但是,不会这么做的。说真的,不要。但是如果你仍然想知道怎么做,它应该是这样的:
import __init__
re = __init__.re
logging = __init__.logging
os = __init__.os我说不要这样做,不仅仅是因为它很混乱和没有意义,还因为你的包不应该像那样使用__init__.py。这是包初始化代码。
https://stackoverflow.com/questions/1201115
复制相似问题