我是否需要在其他模块中重新导入模块

时间:2012-10-28 12:22:37

标签: python module

正如标题所说,我是否需要在导入到主文件的模块中重新导入模块?找不到任何东西,也不确定要搜索什么。因为在epicness中导入otherepic之前这不起作用

文件1:

import epicness
import otherepic

epicness.someother(3)

epicness:

def someother(x):
    return dosomething(x)

otherepic:

def dosomething(x):
    return x*4

1 个答案:

答案 0 :(得分:4)

是的,您必须在每个模块中导入所需的一切。如果在module_a中使用B中定义的module_b函数,则必须在module_b内导入module_a,或者至少导入B函数来自module_b

说明:

在Python模块中是对象!导入模块时,会执行其代码,并且在那里定义的所有内容都附加到模块对象的__dict__

$ echo 'a=1' > testing.py
$ python
Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import testing
>>> 'a' in testing.__dict__
True

模块的__dict__还包含通常的全局内置插件。 模块内定义的任何内容都使用模块的__dict__作为全局范围。 在python中没有“全局变量”这样的东西,这意味着可以从每个模块/类/函数访问变量。 Globals变量实际上只是模块的即时变量。

如果要将某些项目从模块导入另一个模块的命名空间,可以使用from语法:

from module_a import functionA, functionB, classA, CONSTANT

您可以使用*

导入所有内容
from module_a import *

但请避免使用from ... import *语法!你会得到像C包含的命名空间冲突。只有当模块在其文档中声明它是 * - 导入安全时才执行此操作。 要创建模块 * - 导入安全,您可以定义__all__全局,它应该是一个字符串序列,表示在{{1}时应导出的标识符-import被执行。

例如:

*