Python中的长导入

Vor*_*rac 25 python coding-style

我很少写点东西

from blqblq.lqlqlqlq.bla import fobarbazbarbarbazar as foo
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
Run Code Online (Sandbox Code Playgroud)

这需要超过80个字符.官方Python编码风格指南中未涉及此情况.如何写python这样的导入?

Wol*_*lph 33

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

包装长行的首选方法是在括号,括号和括号内使用Python隐含的行继续.通过将表达式包装在括号中,可以在多行中分割长行.这些应该优先使用反斜杠来继续行.确保适当缩进续行.打破二元运算符的首选位置是运算符之后,而不是它之前.

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

from blqblq.lqlqlqlq.bla import (
                                 fobarbazbarbarbazar
                                 as foo)
from matplotlib.backends.backend_qt4agg import (
                                                FigureCanvasQTAgg
                                                as FigureCanvas)
Run Code Online (Sandbox Code Playgroud)

就个人而言,我总是使用这种风格,我觉得它更具有长线可读性:

# 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
)
Run Code Online (Sandbox Code Playgroud)


Jua*_*doy 12

这是PEP8 文档长期 进口:

目前,如果要从模块或包中导入大量名称,则必须选择以下几个令人不快的选项之一:

用反斜杠连续写一个长行:

from Tkinter import Tk, Frame, Button, Entry, Canvas, Text, \
     LEFT, DISABLED, NORMAL, RIDGE, END 
Run Code Online (Sandbox Code Playgroud)

写多个import语句:

from Tkinter import Tk, Frame, Button, Entry, Canvas, Text 
from Tkinter import LEFT, DISABLED, NORMAL, RIDGE, END 
Run Code Online (Sandbox Code Playgroud)

(进口*不是一种选择;-)

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

from Tkinter import (Tk, Frame, Button, Entry, Canvas, Text,
    LEFT, DISABLED, NORMAL, RIDGE, END) 
Run Code Online (Sandbox Code Playgroud)

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

Python 2.4中添加了括号支持.

  • “这是 PEP8 文档...”顶部的链接指向 PEP 0328。引用的语言最初存在于 PEP8 中吗? (4认同)