一行有多个导入有什么不好吗?

2024-09-26 17:48:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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

import random, time, matplotlib, cheese, doge

当我阅读别人的代码时,我看到的是:

import random
import time
import matplotlib
import cheese
import doge

这是为什么?这两种款式有什么区别吗?


Tags: 模块代码importtimematplotlib编程random区别
3条回答

每行一个导入的实践在PEP8中是标准化的,遵循一个通用的标准就足够了。遵循公共标准遵循Principle of Least Astonishment,使熟悉标准的人更容易阅读和修改代码。

即使您不关心PEP8,但是每行一个导入会使您的代码更易于维护。

  • 导入更易于浏览/阅读:

    • import fred中得到fred比在import barney, betty, wilma, fred, bambam, pebbles中更容易看到
  • 导入更容易找到:

    • 搜索“import fred”将找到import fredimport fred, wilma, pebbles,但找不到import barney, fred
  • 导入更易于编辑:

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

    • 每个已更改的模块在更改集中都有自己的行-您不必读取行就可以确定哪些模块已更改。
    • 缺少和添加的模块会影响文件和更改集中的行数。
    • 在对变更集进行可视化浏览时,排版更容易识别和更正。

每行一次导入将是一个好主意,即使它不是标准。因为这是标准,所以这是最好的方法。

I don't like to follow blindly without valid reason. As PEP20: Zen of Python states that "Readability Counts"

PEP8“每导入一行”适用于一般透视图。虽然我尊重他的(即圭多)意见,但我不会一直严格遵守这些惯例。

此规则的例外情况仅当代码的#小于模块导入的#时。e、 g.2行代码,但4个模块导入。

这更容易阅读:(在我看来)

import os, sys, math, time

def add_special():
    return time.time() + math.floor(math.pow(sys.api_version + os.getpid(), 2))

而不是这个

import os
import sys
import math
import time

def add_special():
    return time.time() + math.floor(math.pow(sys.api_version + os.getpid(), 2))

但这种可读性对每个人来说是不同的。

根据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

回答你的问题-两个都可以,但其中一个不符合PEP8指南。

相关问题 更多 >

    热门问题