Tur*_*ion 5 python import module
首先,如果在其他地方已经提出过这个问题,我很抱歉.我真的在寻找它,但没有找到任何东西.
情况如下:在文件夹中mod,我有文件__init__.py和sub.py.它们包含以下数据
__init__.py:
print "mod"
Run Code Online (Sandbox Code Playgroud)
sub.py:
import __init__
print "sub"
Run Code Online (Sandbox Code Playgroud)
现在让我们做以下事情:
>>> import mod
mod
>>> import mod.sub
mod
sub
Run Code Online (Sandbox Code Playgroud)
但是在做的时候import mod.sub,为什么mod/__init__.py再次执行?它已经被导入了.如果我们只是调用,则存在同样的奇怪特征:
>>> import mod.sub
mod
mod
sub
Run Code Online (Sandbox Code Playgroud)
我可以通过更改import __init__?来改变行为吗?这条线似乎很可能对我不利.
您实际上可以通过使用字典来检查发生了什么sys.modules.Python决定根据该字典中的键重新加载模块.
当您运行import mod,它会创建一个条目,mod在sys.modules.
当你运行时import mod.sub,在调用之后import __init__,Python检查密钥mod.__init__是否在sys.modules,但是没有这样的密钥,所以它再次被导入.
底线是Python决定通过存在的键重新导入模块sys.modules,而不是因为实际模块已经导入.
你应该更换
import __init__
Run Code Online (Sandbox Code Playgroud)
经过
import mod
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1397 次 |
| 最近记录: |