当前位置: 首页 > 面试题库 >

Python导入优先级:包还是模块?

高自怡
2023-03-14
问题内容

我不清楚如何正确命名这个问题。

情况1

假设我具有以下目录结构。

foo
|
+- bar/__init__.py
|
+- bar.py

如果我有

from foo import bar

我如何知道要导入哪个条(bar.pybar/__init__.py)?有没有简单的方法可以自动检测到这种情况?

情况二

foo
|
+- foo.py
|
+- other.py

如果other.py有这一行

import foo

我如何知道要导入哪个foo(foo或foo.foo)?再次,这是否是一种简单的方法来自动检测到这种情况?


问题答案:

TLDR;如果程序包位于同一目录中,则它们优先于相同名称的模块。

从文档:

“当spam导入一个名为的模块时,解释器会spam.py在当前目录中搜索一个文件,然后在环境变量指定的目录列表中搜索PYTHONPATH。这具有与shell变量PATH相同的语法,即目录名称。”

这有点误导,因为解释器还会寻找一个名为的包spam(一个spam包含__init__.py文件的目录)。由于目录条目是在搜索之前进行排序的,因此,如果程序包位于同一目录中,则它们优先于具有相同名称的模块,因为它们位于spam之前spam.py

请注意,“当前目录”是相对于主脚本路径(where __name__ == '__main__' is True)。因此,如果您正在/home/billg通话/foo/bar.py,则“当前目录”是指/foo



 类似资料:
  • 我有这样的表达: 以下哪些元素(

  • 问题内容: 我已尝试找到有关最佳使用还是全面的指南。我刚开始使用Python,并且正在尝试着眼于最佳实践。 基本上,我希望有人能分享他们的经验,其他开发人员有什么喜好,以及避免遇到麻烦的最佳方法是什么? 问题答案: 和之间的区别主要是主观的。选择最喜欢的一个,并在使用中保持一致。这里有一些要点可以帮助你做出决定。 优点: - 减少维护你的import报表。无需添加任何其他导入即可开始使用模块中的另

  • Casbin支持参考优先级加载策略。 通过隐式优先级加载策略 这非常简单,顺序决定了策略的优先级,策略出现的越早优先级就越高。 model.conf: [policy_effect] e = priority(p.eft) || deny 通过显式优先级加载策略 另见: casbin#550 策略的第一个要素一定是优先级,并且优先级值较小的将具有较高的优先地位。 如果优先级有非数字字符,它将是被

  • 我需要一个优先级队列,它首先获得具有最高优先级值的项目。我当前正在使用队列库中的PriorityQueue类。但是,这个函数只先返回值最小的项。我尝试了一些很难看的解决方案,比如(sys.maxint-priority)作为优先级,但我只是想知道是否存在更优雅的解决方案。

  • 通过,我们了解到更新具有优先级。 那么什么是优先级?优先级以什么为依据?如何通过优先级决定哪个状态应该先被更新? 本节我们会详细讲解。 什么是优先级 在我们聊到React将人机交互研究的结果整合到真实的UI中。具体到React运行上这是什么意思呢? 状态更新由用户交互产生,用户心里对交互执行顺序有个预期。React根据人机交互研究的结果中用户对交互的预期顺序为交互产生的状态更新赋予不同优先级。 具

  • 问题内容: 只是想知道我们如何在node.js 8中导入模块-我们仍在使用吗? 还是我们仍然需要babel来使用? 我一直在挖掘,但似乎没有答案。如果我们仍然必须使用require,为什么节点还不能实现? 问题答案: UPDATE-2018.11.15↓ 简短答案 我们仍在使用 长答案 ESM加载已部分降落在2017年9月发布的node 上。正因为如此,它已经成为规范的一部分,并且已经作为实验功能