根据官方文档,os.path
是一个模块。因此,导入它的首选方式是什么?
# Should I always import it explicitly?
import os.path
要么…
# Is importing os enough?
import os
请不要回答“os
为我导入作品”。我知道,它现在也对我有效(自python 2.6起)。我想知道的是有关此问题的任何官方建议。因此,如果您回答此问题,请
发表您的参考资料 。
os.path
以一种有趣的方式工作。看起来os
应该是一个带有子模块的程序包path
,但实际上os
是一个普通的模块,sys.modules
可以注入魔力os.path
。这是发生了什么:
Python启动时,会将一堆模块加载到中sys.modules
。它们没有绑定到脚本中的任何名称,但是以某种方式导入它们时,您可以访问已创建的模块。
sys.modules
是在其中缓存模块的命令。导入模块时,如果它已经被导入到某处,它将获取实例存储在中sys.modules
。os
是Python启动时加载的模块之一。它将其path
属性分配给特定于os的路径模块。它会注入,sys.modules['os.path'] = path
以便您可以像对待import os.path
子模块一样执行“ ”。
我倾向于将其os.path
看作 是我要使用 的os
模块,而不是 模块中的 任何东西 ,因此,即使它 实际上
不是被称为包的子模块os
,我也可以将其导入,就像 我一直那样import os.path
。这与os.path
记录方式一致。
顺便说一句,我认为这种结构导致很多Python程序员对模块和包以及代码组织产生了早期的困惑。这确实有两个原因
如果您将其os
视为一个包并且知道可以执行import os
并有权访问该子模块os.path
,则稍后可能会感到惊讶,因为您无法执行import twisted
并且twisted.spread
无需导入就可以自动访问。
令人困惑的是,这os.name
是正常现象,字符串和os.path
模块。我总是用空__init__.py
文件来构造我的包,以便在同一级别上我总是有一种类型的东西:模块/包或其他东西。几个大型的Python项目都采用这种方法,这往往会使代码更加结构化。
问题内容: 我正在使用c / c 为osx和linux开发命令行界面可执行文件。该项目将链接到opencv。我应该使用libc 还是libstdc ++? 问题答案: 我会为每个操作系统使用本机库,即GNU / Linux上的libstdc 和Mac OS X上的libc 。 libc 在GNU / Linux上不是100%完整的,而libstdc 更完整时使用libc并没有真正的优势。另外,如果
问题内容: 和CSS 和有什么不一样?我应该使用哪一个?为什么? 问题答案: 所有这些答案似乎都是不正确的。与直觉相反,在CSS 中不是pixel 。至少不是在简单的物理意义上。 从W3C,EM,PX,PT,CM,IN…阅读本文,了解如何为CSS发明一个“神奇的”单元。的含义因硬件和分辨率而异。(该文章是最新的,最新更新为2014-10。) 我自己的思考方式: px单位是CSS的魔术单位。它与当前
问题内容: 我正在一个将Angular和Underscore都作为依赖项的项目。 当我需要创建对象的副本时,根据当时的心情,我可以使用或 在我看来,这些方法中的一种可能比另一种更快速/可靠/健壮。 假设已经包含两个库,那么这两个函数中的任何一个是否存在使另一个函数更好或更坏使用的已知问题? 问题答案: 关于您的问题: angular.copy和_.clone是不同的。这不是哪个更好的问题,而是关于
问题内容: 我想从文本文件中读取每一行并将它们存储在ArrayList中(每一行是ArrayList中的一项)。 到目前为止,我知道BufferedInputStream写入缓冲区,并且仅在缓冲区为空时才进行另一次读取,这可以最大程度地减少或至少减少操作系统的操作量。 我正确吗-我说得通吗? 如果以上情况是在任何情况下,任何人都想使用DataInputStream。最后,我应该使用这两个中的哪一个
问题内容: 在numpy中,可以使用切片语法中的’newaxis’对象创建长度为1的轴,例如: 该文档的状态是一个也可以用代替,效果是完全一样的。 有什么理由选择一个?是否有一般偏好或样式指南?我的印象是更受欢迎,可能是因为它更明确。那么,有什么理由允许这样做? 问题答案: 之所以被允许,是因为它仅仅是的别名。 作者之所以选择它,是因为他们需要一个方便的常量并且可用。 至于为什么你应该更喜欢过:主
问题内容: 在使用SciPy的和NumPy的一个项目,我应该使用,或? 问题答案: 所以没关系,它们都是相同的值。 这三个模块均提供值的唯一原因是,如果仅使用三个模块之一,则可以方便地访问pi,而无需导入另一个模块。他们没有为pi提供不同的值。
我应该在项目中使用,还是更好地使用?换句话说,什么时候使用每种方法更好?
问题内容: 我打算使用Java代码开发桌面应用程序,并想使用任何现成的 框架,然后我对Eclipse RCP / eclipse scout有所了解,但我不确定应该使用哪个框架来运行 eclipse rcp 还是 eclipse scout ?有人可以建议我吗。 问题答案: 首先,我想添加另一个选项:Eclipse Riena。Eclipse Riena与Eclipse Scout相当,因为它基于