在一条线上进行多次进口有什么不好吗?

Vla*_*tin 15 python import

当我用Python编程并且我需要导入多个模块时,我通常喜欢这样:

import random, time, matplotlib, cheese, doge
Run Code Online (Sandbox Code Playgroud)

然后,当我阅读其他人的代码时,这就是我所看到的:

import random
import time
import matplotlib
import cheese
import doge
Run Code Online (Sandbox Code Playgroud)

为什么是这样?这两种风格有什么区别吗?

pcu*_*rry 22

每行一次进口的做法在PEP8中被标准化,遵循一个共同的标准是足够的理由像其他人那样做.遵循通用标准遵循最小惊讶原则,使熟悉标准的人更容易阅读和修改您的代码.

但是,即使您不关心PEP8,每行一次导入也可以使您的代码更易于维护.

  • 进口更容易浏览/阅读:

    • 你可以更容易地看到你得到了一个fredimport fred不是一个import barney, betty, wilma, fred, bambam, pebbles
  • 进口更容易找到:

    • 搜索"进口弗雷德"将发现import fredimport fred, wilma, pebbles,但不会找到import barney, fred
  • 导入更容易编辑:

    • 在大多数编辑器中插入和删除整行很快.
    • 每行只有一个模块,因此您无需在行中搜索以查找要编辑的内容 - 最后一行.
    • 重新定位模块内的导入只是移动整行.
    • 将几个导入中的一个复制到另一个Python模块是一行的复制粘贴,而不是复制粘贴,然后修剪掉你不想要的其他导入.
  • 进口更容易维护:

    • 每个更改的模块在更改集中都有自己的行 - 您不必读取一行来确定更改了哪个或哪些模块.
    • 缺少和添加的模块会影响文件和更改集中的行数.
    • 在更改集的视觉撇去时,错别字更容易挑选和纠正.

即使不是标准,每行一次进口也是一个好主意.因为它是标准,所以它是最好的方式.

  • 我喜欢直觉,而不仅仅是指PEP8! (3认同)

kar*_*ikr 14

根据PEP-8(Python代码样式指南)

Imports should usually be on separate lines, for e.g

Yes: import os
     import sys

No:  import sys, os 

It's okay to say this though:

from subprocess import Popen, PIPE
Run Code Online (Sandbox Code Playgroud)

要回答你的问题 - 两者都可以正常工作,但有一个不符合PEP8指南.

  • 我通常更喜欢将所有导入都保留在一行上,除非行字符数超过80,只是为了使代码更短。万一出于某种原因我有50个进口。 (2认同)

Yeo*_*Yeo 7

我不喜欢在没有正当理由的情况下盲目跟随。正如PEP20:Python的Zen指出“可读性很重要”

PEP8“ 每次导入单行 ”适用于一般情况。尽管我尊重他(即Guido)的意见,但我并不总是一直严格遵守这些约定。

仅当代码数小于模块导入数时,此规则例外。例如2行代码,但4个模块导入。

这更容易理解:(我认为)

import os, sys, math, time

def add_special():
    return time.time() + math.floor(math.pow(sys.api_version + os.getpid(), 2))
Run Code Online (Sandbox Code Playgroud)

代替这个

import os
import sys
import math
import time

def add_special():
    return time.time() + math.floor(math.pow(sys.api_version + os.getpid(), 2))
Run Code Online (Sandbox Code Playgroud)

但是,此可读性问题因人而异。