正如标题所说,我是否需要在导入到主文件的模块中重新导入模块?找不到任何东西,也不确定要搜索什么。因为在epicness中导入otherepic之前这不起作用
文件1:
import epicness
import otherepic
epicness.someother(3)
epicness:
def someother(x):
return dosomething(x)
otherepic:
def dosomething(x):
return x*4
答案 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被执行。
例如:
*