当我用Python编程并且我需要导入多个模块时,我通常喜欢这个:
import random, time, matplotlib, cheese, doge
然后,当我阅读其他人的代码时,这就是我所看到的:
import random
import time
import matplotlib
import cheese
import doge
这是为什么?这两种风格有什么区别吗?
答案 0 :(得分:19)
每行一次导入的做法在PEP8标准化,遵循一个共同的标准就足以像其他人那样做。遵循通用标准遵循Principle of Least Astonishment,使熟悉标准的人更容易阅读和修改您的代码。
即使您不关心PEP8,每行一次导入也可以使您的代码更易于维护。
导入更容易浏览/阅读:
fred
中的import fred
比import barney, betty, wilma, fred, bambam, pebbles
导入更容易找到:
import fred
和import fred, wilma, pebbles
,但找不到import barney, fred
导入更容易编辑:
导入更容易维护:
即使不是标准,每行一次导入也是一个好主意。因为它是标准,所以它是最好的方式。
答案 1 :(得分:13)
根据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指南。
答案 2 :(得分:5)
我不想在没有正当理由的情况下盲目追随。正如PEP20:Python的Zen声明" Readability Counts"
PEP8" 每次导入单行"适用于一般观点。虽然我尊重他(即圭多)的意见,但我并不总是严格遵守这些惯例。
此规则的例外情况仅在代码的#小于模块导入的#时。例如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))
但这种可读性问题因人而异。
答案 3 :(得分:0)
这两个例子在功能上是等价的。但是,PEP 8,Python的官方样式指南,有一个here部分,它谴责将多个导入放在一行上的做法:
Imports should usually be on separate lines, e.g.: Yes: import os import sys No: import sys, os It's okay to say this though: from subprocess import Popen, PIPE
因此,许多Python程序员每行只放置一个导入,以遵循本指南。
答案 4 :(得分:0)
官方Python样式指南PEP-8要求每行导入一个包或模块。
它被认为是好的风格,通常标准化使程序易于阅读。如果这就是你要问的话,我认为引擎盖下没有实质性的差异。