Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python2.7中,从包中导入名称、子模块或子包的优先级是多少?_Python_Python 2.7_Import_Python Internals - Fatal编程技术网

在Python2.7中,从包中导入名称、子模块或子包的优先级是多少?

在Python2.7中,从包中导入名称、子模块或子包的优先级是多少?,python,python-2.7,import,python-internals,Python,Python 2.7,Import,Python Internals,在报告中说: 请注意,当使用来自\u包的导入\u项时,该项可以是包的子模块(或子包),也可以是包中定义的其他名称,如函数、类或变量 如果a_包同时具有名为a_项的子包、名为a_项的变量和名为a_项的模块,该怎么办?优先事项是什么?我做了一个实验,结果显示优先级为变量子包子模块,但我不确定python导入功能是否在所有情况下都遵循规范顺序。问题中引用的名称在包中定义的下一句话(“变量”),使用您的措辞)优先于子模块/包: import语句首先测试项目是否在包中定义;如果不是,则假定它是一个模块并尝

在报告中说:

请注意,当使用来自\u包的导入\u项时,该项可以是包的子模块(或子包),也可以是包中定义的其他名称,如函数、类或变量


如果
a_包
同时具有名为
a_项
的子包、名为
a_项
的变量和名为
a_项
的模块,该怎么办?优先事项是什么?我做了一个实验,结果显示优先级为
变量
子包
子模块
,但我不确定python导入功能是否在所有情况下都遵循规范顺序。

问题中引用的名称在包中定义的下一句话(“变量”),使用您的措辞)优先于子模块/包:

import
语句首先测试项目是否在包中定义;如果不是,则假定它是一个模块并尝试加载它

我在Python2.7的文档中找不到明确的确认,即包优先于模块。我确实发现了这一点,在:

在导入处理期间,导入机制将继续迭代父路径中的每个目录,就像在Python 3.2中一样。查找名为“foo”的模块或包时,对于父路径中的每个目录:

  • 如果找到
    /foo/\uuuuu init\uuuuu.py
    ,则导入并返回一个常规包
  • 如果没有,但是找到了
    /foo.{py,pyc,so,pyd}
    ,则导入并返回一个模块
。。。虽然它只明确指出这是Python3.2中的行为,但这可能意味着“…和Python的早期版本”。这再次证实了您的发现,即包优先于模块

然而:依赖此实现细节将是一个糟糕的想法。世界上意识到这一点的人数可能不会远远超过Python的核心开发人员;它在所有意图和目的上都是未记录的,并且容易导致极难追踪到bug