我是Python新手。我正在开发一个小项目。我需要从病房开始遵循编码标准。如何以正确的方式使用import
语句。现在我正在研究Python 2.7。如果我搬到3.x是否与绝对进口有冲突?绝对和相对进口有什么区别?
答案 0 :(得分:26)
此处绘制的absolute
和relative
之间的区别与我们讨论绝对和相对文件路径甚至URL的方式非常相似。
绝对{导入,路径,网址}告诉您完全如何获取您所追求的东西,通常是指定每个部分:
import os, sys
from datetime import datetime
from my_package.module import some_function
相对{导入,路径,网址}正是他们所说的:他们相对到他们当前的位置。也就是说,如果目录结构发生变化或文件移动,这些可能会中断(因为它们不再意味着相同的事情)。
from .module_in_same_dir import some_function
from ..module_in_parent_dir import other_function
因此,对于将要共享的代码,首选绝对导入。
我在评论中被要求提供一个示例,说明from __future__ import absolute_import
如何与此相关联,以及如何使用它。在试图制定这个例子时,我意识到我无法解释它的行为,所以我asked a new question。 This answer提供了一个代码示例,展示了from __future__ import absolute_import
的正确工作实现,它实际上解决了歧义。
The accepted answer详细介绍了为什么它的工作原理,包括讨论Python 2.5更改日志的混乱措辞。从本质上讲,该指令的范围(以及扩展Python中绝对和相对导入的区别)非常非常狭窄。如果你发现自己需要这些区别来使你的代码工作,那么你可能最好尽可能重命名本地模块。
答案 1 :(得分:0)
导入通常应放在单独的行上:
是:导入操作系统 导入系统
否:import sys,os
可以这样说:
从子流程导入Popen,PIPE 导入总是放在文件的顶部,在任何模块注释和文档字符串之后,在模块全局变量和常量之前。
进口应按以下顺序分组:
标准库导入。 相关第三方进口。 本地应用程序/库特定的导入。 您应该在每组进口之间放置一个空白行。
根据Pep8:- 建议绝对导入,因为如果导入系统配置不正确(例如,程序包中的目录结束时),它们通常更具可读性,并且通常表现更好(或至少会提供更好的错误消息)取决于sys.path):
导入mypkg.sibling 从mypkg导入同级 从mypkg.sibling导入示例 但是,显式相对导入是绝对导入的一种可接受的替代方法,尤其是在处理复杂的包装布局时,使用绝对导入会不必要地冗长:
来自。进口同胞 从.sibling导入示例 标准库代码应避免复杂的程序包布局,并始终使用绝对导入。
永远不要使用隐式相对导入,并且在Python 3中已将其删除。
从包含类的模块导入类时,通常可以这样:
从myclass导入MyClass 从foo.bar.yourclass导入YourClass 如果此拼写引起本地名称冲突,则应明确拼写它们:
导入myclass 导入foo.bar.yourclass 并使用“ myclass.MyClass”和“ foo.bar.yourclass.YourClass”。
应避免通配符导入(从import *导入),因为通配符使不清楚名称空间中存在哪些名称,从而使读者和许多自动化工具感到困惑。通配符导入有一个合理的用例,它是将内部接口重新发布为公共API的一部分(例如,用可选的加速器模块中的定义覆盖接口的纯Python实现,以及确切的定义是覆盖未知)。