2014-10-08 45 views

回答

7

使用括号,以便将进口在一起:

from myapp.models import (foo, bar, foobar, barfoo, foofoo, 
    barbar, barfoobar, thelistgoeson, and, on, and, so, on) 

这是按照PEP-328 Rationale for parentheses

目前,如果你想从一个模块或 包导入了很多名字,你必须选择几个难吃的选项之一:

  • 写一个长队与后卫^ h延续:
  • 写多个import语句:

import *是不是一种选择;-)

相反,它应该可以使用Python的标准分组 机制(括号内)写的进口声明:

该提案的这一部分从一开始就得到BDFL的批准。

圆括号支持已添加到Python 2.4。

+7

我把不同的名字放在不同的行上并对它们进行排序。通过这种方式,添加或删除名称在差异中更加清晰。 – 2014-10-08 09:46:53

+0

我不知道我可以使用圆括号 - 现在看来很明显,杜。现在,我为每个名称和最后一行中的尾随逗号分别设置了一行,以便在git和diff中实现更好的可读性 – 2014-10-08 10:41:32

2

如何导入模型?

from myapp import models 

foo = models.foo 
bar = models.bar 

它更短,您不必维护进口清单。你也有一个命名空间,你可以有局部变量foobar

+1

'from myapp.models import foo' * already *创建了一个名为'foo'的局部变量。这就是导入所做的事情:它将来自外部模块的值绑定到当前模块名称空间中的名称。此代码实际上是*更长*,因为您必须为每个本地名称重复模块名称和模块成员。只有各条线较短。 – chepner 2014-10-08 09:56:04

+0

我知道这一点。但是你可以为每个变量保留一个名称空间,这是有道理的,而不是让所有的局部变量和你的导入共享相同的名字空间。它最终没有太大变化,但这就是我尝试使用的方式(并不总是可能的) – Paco 2014-10-08 10:53:30

+0

如果我了解您所做的区别,您可以使用这两个导入:'从myapp导入模型'具有'模型'在本地命名空间中访问你不需要特别导入的东西,然后'from myapp.models import(foo,bar等)'来导入特定的名称。 – chepner 2014-10-08 12:33:35