52

我有时不得不写一些类似的东西

from blqblq.lqlqlqlq.bla import fobarbazbarbarbazar as foo
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas

这需要80多个字符。这种情况在官方 Python 编码风格指南中没有涉及。如何以 python 方式编写此类导入?

4

2 回答 2

53

http://www.python.org/dev/peps/pep-0008/#maximum-line-length

Python 标准库是保守的,要求将行数限制为 79 个字符(文档字符串/注释限制为 72 个)。

包装长行的首选方法是在括号、方括号和大括号内使用 Python 的隐含行继续。通过将表达式括在括号中,可以将长行分成多行。这些应该优先使用反斜杠来继续行。

所以在你的情况下,这可能是:

from blqblq.lqlqlqlq.bla import (
                                 fobarbazbarbarbazar
                                 as foo)
from matplotlib.backends.backend_qt4agg import (
                                                FigureCanvasQTAgg
                                                as FigureCanvas)

就我个人而言,我总是使用这种风格,我觉得长行更易读:

# Just 1 indent
from blqblq.lqlqlqlq.bla import (
    fobarbazbarbarbazar
    as foo
) # end at the next line so it's always clear where what ends

from matplotlib.backends.backend_qt4agg import (
    FigureCanvasQTAgg as FigureCanvas
)
于 2013-06-24T11:04:07.760 回答
25

这是长导入PEP8 文档

目前,如果你想从一个模块或包中导入很多名称,你必须选择几个令人不快的选项之一:

用反斜杠继续写一长行:

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 

( import * 不是一个选项 ;-)

相反,应该可以使用 Python 的标准分组机制(括号)来编写 import 语句:

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

这部分提案从一开始就获得了 BDFL 的批准

Python 2.4 添加了括号支持。

于 2016-01-09T19:31:49.667 回答