3

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

文件1:

import epicness
import otherepic

epicness.someother(3)

史诗:

def someother(x):
    return dosomething(x)

其他:

def dosomething(x):
    return x*4
4

1 回答 1

4

是的,你必须在每个模块中导入你需要的一切。如果使用 in 中定义module_a的函数,则必须 import inside ,或者至少导入函数 from 。Bmodule_bmodule_bmodule_aBmodule_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!
于 2012-10-28T13:10:15.463 回答