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

我读到在 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)

是否有一个推荐的格式或更优雅的方式这种声明?

51382 次浏览

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

PEP 8 没有列出这种情况下的任何约定,所以我想应该由您来决定什么是最好的选择。它完全是关于可读性的,所以选择任何能够清楚地表明您是从单个模块导入内容的内容。

由于所有这些名称都可以在您的作用域中使用,我个人认为选项2是最清楚的,因为您可以看到导入的名称是最好的。然后,您甚至可以将它们更多地分开,也许可以将属于彼此的那些名称分组在一起。在您的示例中,我可能将 TkFrameCanvas分开放置,因为它们将小部件组合在一起,而将 ButtonText分开放置,因为它们在视图中是较小的组件。

你的例子似乎来源于 PEP 328。在这里,括号符号被提出来,正是为了解决这个问题,所以我可能会选择这个。

我个人在导入多个组件时使用括号并按字母顺序排序,如下所示:

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

这样做的另一个好处是,可以很容易地看到在每次提交或 PR 中添加/删除了哪些组件。

总的来说,虽然这是一个个人偏好,我会建议你去任何看起来最适合你。

我将使用 PEP328中的括号符号,并在括号前后添加新行:

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

这是 姜戈使用的格式:

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,
)