点操作符导入1.7 vs 1.8风格

时间:2015-04-30 03:47:06

标签: python django

我注意到Django 1.7和更新的1.8官方教程之间的语法上的这个微小变化。

1.7

from django.contrib import admin
from polls.models import Question

admin.site.register(Question)

1.8(您可以看到该应用已删除)

from django.contrib import admin

from .models import Question

admin.site.register(Question)

为什么要改变?哪个更好的代码? 忘了正确的终结,但与点击运算符有关。

我也看过像这样使用的点运算符;这意味着什么?

from django.conf.urls import url

from . import views

完成一些测试/学习,并想知道如何以及通过这种方式使用它。 谢谢大家。

1 个答案:

答案 0 :(得分:1)

这至少有点主观,但在我看来,当您尝试从同一个包中导入文件时,相对导入通常会更好。

如果您碰巧在当前包中有一个名为polls的模块,但在顶层有一个名为polls的包,那么使用polls对读者来说是不明确的 - 并且旧版本与新版本Python的不同含义。但是使用.对任何读者或任何版本的Python只有一个含义,并且它无法与其他任何意外碰撞。

此外,使用相对导入,您可以重命名您的包,一切仍然有效;绝对地,你必须编辑每个文件。如果将包移到另一个包中,可能需要进行更大的更改。

还有一些小的原因。如果您不小心将包放在sys.path上(例如,通过运行顶级应用程序并将当前工作目录设置为包),通常可以更轻松地使用相对导入进行调试。使用相对导入导入自己(在某些情况下,通过pickle或多处理隐式执行)会更容易。

使用旧样式的最佳理由是,您需要向后兼容Python 2.5或更早版本。 (Django曾经支持过,但不再支持。虽然我不知道他们是否切换到了1.8,因为那时他们已经删除了足够的旧版本。)

阅读PEP 328以进一步讨论基本原理。