正如标题所说,我是否需要在导入到主文件的模块中重新导入模块?在这方面找不到任何东西,也不确定要搜索什么。因为这在我导入其他史诗之前不起作用
文件1:
import epicness
import otherepic
epicness.someother(3)
史诗:
def someother(x):
return dosomething(x)
其他:
def dosomething(x):
return x*4
是的,你必须在每个模块中导入你需要的一切。如果使用 in 中定义module_a
的函数,则必须 import inside ,或者至少导入函数 from 。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 中,没有“全局变量”之类的东西,这意味着每个模块/类/函数都可以访问一个变量。全局变量实际上只是模块的即时变量。
如果要将模块中的某些项目导入到另一个模块的命名空间中,可以使用以下from
语法:
from module_a import functionA, functionB, classA, CONSTANT
您可以使用以下命令导入所有内容*
:
from module_a import *
但避免使用from ... import *
语法!您会遇到 C 包含中的命名空间冲突。仅当模块在其文档中声明它是*
-import safe时才执行此操作。为了使模块*
-import 安全,您可以定义全局,它应该是一个字符串序列,表示在执行 -import__all__
时应该导出的标识符。*
例如:
#module_a
A = 1
B = 2
__all__ = ['A']
#module_b
from module_a import *
print(A) #okay
print(B) #NameError, B was not exported!