138

我已经阅读了在 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)

此语句是否有推荐的格式或更优雅的方式?

4

4 回答 4

206

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

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

这具有额外的优势,即可以轻松查看在每次提交或 PR 中添加/删除了哪些组件。

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

于 2013-01-17T10:45:03.010 回答
20

您的示例似乎源于PEP 328。在那里,括号符号正是针对这个问题提出的,所以我可能会选择这个。

于 2013-01-17T10:35:41.023 回答
8

我会使用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,
)
于 2017-02-19T14:20:31.870 回答
-6

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

PEP 8没有针对这种情况列出任何约定,所以我想由您决定什么是最佳选择。一切都与可读性有关,因此请选择任何可以清楚表明您正在从单个模块导入内容的内容。

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

于 2013-01-17T10:34:37.780 回答