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

时间:2013-01-17 10:24:58

标签: python python-2.7 pep8

我已经读过在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 个答案:

答案 0 :(得分:125)

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

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

这样做的另一个好处是可以轻松查看每次提交或PR中添加/删除的组件。

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

答案 1 :(得分:13)

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

答案 2 :(得分:3)

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

import { Component, OnInit,Input } from '@angular/core';

@Component({
    selector: 'sub-menu',
    template: `
        <div *ngFor="let menu of menus"> 
            <a [routerLink]="['menu.link']">{{menu.name}} </a>
        </div>
    `
})
export class StepComponent implements OnInit {
    @Input() menus: any[] = [];
    constructor() { 
        ....
    }

    ngOnInit() { }
}

这是PEP328使用的格式:

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

答案 3 :(得分:-3)

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

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

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