python - 是否有推荐的多行导入格式?

我已经读过在python中有三种编码多行导入的方法

用斜杠:

from Tkinter import Tk, Frame, Button, Entry, Canvas, Text, \
    LEFT, DISABLED, NORMAL, RIDGE, END

复制句子:

from Tkinter import Tk, Frame, Button, Entry, Canvas, Text
from Tkinter import LEFT, DISABLED, NORMAL, RIDGE, END

括号:

from Tkinter import (Tk, Frame, Button, Entry, Canvas, Text,
    LEFT, DISABLED, NORMAL, RIDGE, END)

是否有推荐的格式为这些陈述提供更优雅的方式?

Manuel Alvarez asked 2019-09-11T06:36:43Z
4个解决方案
122 votes

我个人在导入多个组件时使用括号并按字母顺序对它们进行排序。 像这样:

from Tkinter import (
    Button,
    Canvas,
    DISABLED,
    END,
    Entry,
    Frame,
    LEFT,
    NORMAL,
    RIDGE,
    Text,
    Tk,
)

这具有额外的优点,即可以容易地看到在每个提交或PR中添加/删除了哪些组件。

总的来说,虽然这是个人喜好,但我建议你选择最适合自己的东西。

Brendan Maguire answered 2019-09-11T06:37:09Z
13 votes

你的例子似乎源自PEP 328.在那里,括号 - 符号是针对这个问题而提出的,所以我可能会选择这个。

Thorsten Kranz answered 2019-09-11T06:37:33Z
2 votes

我会使用PEP328中的括号表示法,并在括号前后添加换行符:

from Tkinter import (
    Tk, Frame, Button, Entry, Canvas, Text, 
    LEFT, DISABLED, NORMAL, RIDGE, END
)

这是Django使用的格式:

from django.test.client import Client, RequestFactory
from django.test.testcases import (
    LiveServerTestCase, SimpleTestCase, TestCase, TransactionTestCase,
    skipIfDBFeature, skipUnlessAnyDBFeature, skipUnlessDBFeature,
)
from django.test.utils import (
    ignore_warnings, modify_settings, override_settings,
    override_system_checks, tag,
)
Max Malysh answered 2019-09-11T06:38:03Z
-3 votes

通常使用Tkinter,可以使用from Tkinter import *,因为模块只会导出明显小部件的名称。

PEP 8没有列出这种情况的任何约定,所以我想由你决定什么是最好的选择。 这完全取决于可读性,因此请选择任何明确表示您从单个模块导入内容的内容。

由于所有这些名称都在您的范围内提供,我个人认为选项2是最清晰的,因为您可以看到导入的名称最好。 然后,您甚至可以将其拆分为可能将这些名称组合在一起。 在您的示例中,我可能将Tk,FrameCanvas分别放在一起,因为它们将小部件组合在一起,而分别具有ButtonText,因为它们是视图中较小的组件。

poke answered 2019-09-11T06:38:42Z
translate from https://stackoverflow.com:/questions/14376900/is-there-a-recommended-format-for-multi-line-imports