當我編程Python和我需要導入多個模塊,我通常做我喜歡這樣的:在一條線上有多個進口有什麼不好嗎?
import random, time, matplotlib, cheese, doge
後來,當我讀了別人的代碼,這是我所看到的:
import random
import time
import matplotlib
import cheese
import doge
這是爲什麼?這兩種風格有什麼區別?
當我編程Python和我需要導入多個模塊,我通常做我喜歡這樣的:在一條線上有多個進口有什麼不好嗎?
import random, time, matplotlib, cheese, doge
後來,當我讀了別人的代碼,這是我所看到的:
import random
import time
import matplotlib
import cheese
import doge
這是爲什麼?這兩種風格有什麼區別?
按照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準則。
這兩個例子在功能上是等同的。然而,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程序員將每行只有一個導入以遵循這個準則。
PEP-8是官方的Python風格指南,規定每行應該導入一個包或模塊。
它被認爲是很好的風格,通常標準化使程序易於閱讀。如果這就是你所要求的,我不認爲在引擎蓋下存在實質差異。
每行一個進口的做法是在PEP8中標準化的,遵循一個通用的標準就足以像其他人那樣做。遵循一個通用標準遵循Principle of Least Astonishment,使熟悉標準的人們更容易閱讀和修改代碼。
儘管您不關心PEP8,但每行一次導入會使您的代碼更易於維護。
進口更容易脫脂/讀取:
import fred
得到一個fred
比import barney, betty, wilma, fred, bambam, pebbles
進口更容易找到:
import fred
和import fred, wilma, pebbles
,但不會找到import barney, fred
進口更容易編輯:
進口更易於維護:
一個進口將是即使它是不是標準的一個好主意。既然這是標準,那麼最好的辦法就是加倍。
我喜歡直覺,而不僅僅是參考PEP8! –
我不喜歡盲目追隨沒有正當理由。作爲PEP20:Python中的禪指出「可讀性計數」
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))
,而不是這個
import os
import sys
import math
import time
def add_special():
return time.time() + math.floor(math.pow(sys.api_version + os.getpid(), 2))
但這可讀性事因每個人。
我回答了每行一個導入的很多好處 - 其中大多數解決了維護每行多個導入代碼的問題,特別是在大型Python代碼庫中。 – pcurry