Python(和 Django)最佳导入实践

标签 python django python-import

在导入代码的各种方式中,与其他方式相比,有哪些方式更适合使用?此链接http://effbot.org/zone/import-confusion.htm简而言之 声明

from foo.bar import MyClass

在正常情况下或除非您知道自己在做什么,否则不是导入 MyClass 的首选方式。 (相反,更好的方法是:

import foo.bar as foobaralias

然后在代码中,访问MyClass使用

foobaralias.MyClass

)

简而言之,上面引用的链接似乎在说通常从模块中导入所有内容而不是模块的一部分会更好。

但是,我链接的那篇文章确实很旧。

我还听说,至少在 Django 项目的上下文中,最好只导入您要使用的类,而不是整个模块。据说这种形式有助于避免循环导入错误或至少使 django 导入系统不那么脆弱。有人指出,Django 自己的代码似乎更喜欢“from x import y”而不是“import x”。

假设我正在处理的项目不使用 __init__.py 的任何特殊功能 ...(我们所有的 __init__.py 文件都是空的),我应该使用哪种导入方法,为什么?

最佳答案

首先,也是主要的导入规则:永远不要使用 from foo import *

这篇文章正在讨论周期性导入的问题,该问题今天仍然存在于结构不良的代码中。我不喜欢周期性进口;它们的存在是一个强烈的信号,表明某些模块做得太多,需要拆分。如果出于某种原因您需要使用无法重新排列的循环导入代码,import foo 是唯一的选择。

在大多数情况下,import foofrom foo import MyClass 之间没有太大区别。我更喜欢第二种,因为涉及的打字更少,但有几个原因我可能会使用第一种:

  • 模块和类/值有不同的名称。当导入值的名称与模块无关时,读者可能很难记住特定导入的来源。

    • 好:import myapp.utils as utils; utils.frobncate()
    • 好:import myapp.utils as U; U.frobncate()
    • 错误:from myapp.utils import frobncate
  • 您正在从一个模块中导入大量值。保护您的手指和读者的眼睛。

    • 错误:from myapp.utils import frobnicate, foo, bar, baz, MyClass, SomeOtherClass, # yada yada

关于Python(和 Django)最佳导入实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1704058/

相关文章:

python - Pandas 矢量化中的复杂条件

python - 如何在 TensorBoard 中单独运行我的 TensorFlow 代码?

python - wxPython 通过 py2app : "no appropriate 64-bit architecture" ERROR even though 32-bit preference set

python - 修改使用 from ... import * 导入的模块中的变量

python - 一个很酷的 python 脚本,让青少年学习 python 对编程感到兴奋?

django - Virtualenv - 清理未使用的软件包安装

jquery - 检测更改后的表单值——Firefox 用用户输入值替换,破坏了脏污检测

python - 如何在 Django 中使用派生数据进行数据库内存缓存?

PYTHON -> 创建一个在导入时打印内容的模块

python - 一次设置多个对象属性