Fed*_*les 13 python import module
假设我有以下结构:
app/
__init__.py
foo/
a.py
b.py
c.py
__init__.py
Run Code Online (Sandbox Code Playgroud)
a.py,b.py和c.py共享一些常见的导入(logging,os,re等).是否可以从__init__.py文件中导入这三个或四个常用模块,这样我就不必在每个文件中导入它们了?
编辑:我的目标是避免在每个文件中导入5-6个模块,这与性能原因无关.
jkp*_*jkp 14
您可以使用常见文件来执行此操作include.py,但这违反了建议的做法,因为它涉及通配符导入.请考虑以下文件:
app/
__init__.py
foo/
a.py
b.py
c.py
include.py <- put the includes here.
__init__.py
Run Code Online (Sandbox Code Playgroud)
现在,a.py等等,做:
from include import *
Run Code Online (Sandbox Code Playgroud)
如上所述,不建议使用,因为不鼓励使用通配符导入.
bal*_*pha 11
不,它们必须放在每个模块的命名空间中,所以你必须以某种方式导入它们(除非你logging作为函数参数传递,这将是一种奇怪的做事方式,至少可以说).
但模块仅导入一次呢(然后放入a,b和c命名空间),所以不用担心使用太多的内存或者类似的东西.
当然,你可以把它们放入一个单独的模块,并导入该到每一个a,b和c,但这种单独的模块仍然必须进口每次.
是的,但不要这样做.说真的,不要.但如果您仍然想知道如何做,它看起来像这样:
import __init__
re = __init__.re
logging = __init__.logging
os = __init__.os
Run Code Online (Sandbox Code Playgroud)
我说不要这样做,不仅因为它的杂乱而且毫无意义,还因为你的包装并不是真的应该这样使用__init__.py.它是包初始化代码.