当我用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,每行一次导入也可以使您的代码更易于维护.
进口更容易浏览/阅读:
fred而import fred不是一个import barney, betty, wilma, fred, bambam, pebbles 进口更容易找到:
import fred和import fred, wilma, pebbles,但不会找到import barney, fred导入更容易编辑:
进口更容易维护:
即使不是标准,每行一次进口也是一个好主意.因为它是标准,所以它是最好的方式.
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指南.
我不喜欢在没有正当理由的情况下盲目跟随。正如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)
但是,此可读性问题因人而异。