2016-09-14 47 views
2

我試圖堅持最好的做法,當涉及到導入模塊,我想了解什麼PEP8說這個。PEP8導入約定

假設我的框架有幾百個類和幾十個包。例如,PyQt5或sympy將會是很好的候選人......這套系列最好的選擇是什麼?

一)進口一切

from PyQt5.QtCore import * 
from PyQt5.QtGui import * 
from PyQt5.QtWidgets import * 

print(QPoint) 
print(QPixmap) 
print(QApplication) 

b)進口只有大包,並使用前綴爲整個應用程序

from PyQt5 import QtCore, QtGui, QtWidgets 

print(QtCore.QPoint) 
print(QtGui.QPixmap) 
print(QtWidgets.QApplication) 

c)從一個大包件導入特定的類

from PyQt5.QtCore import QPoint 
from PyQt5.QtGui import QPixmap 
from PyQt5.QtWidgets import QApplication 

print(QPoint) 
print(QPixmap) 
print(QApplication) 

選項a)PEP8不鼓勵b)或c)...什麼是PEP8關於它的推薦?

+1

我個人更喜歡b)如果您使用模塊中的多個對象,則使用a)。但在PEP 8中沒有規定。 –

+1

沒有具體的答案。如果我打算只使用每個模塊中的幾個對象,那麼我會明確地導入它們,如(c)所示。如果我使用每個模塊的很多對象,我通常使用(b)。 – Blender

+1

這取決於上下文。我總是在應用程序中使用(c),以及(b)在教程,示例,文檔等中我從不使用(a) - 在交互式會話中進行試驗時,我傾向於使用'從PyQt5導入Qt'在單個命名空間中的所有內容)。我並不特別在乎我的編碼實踐是否與pep8完全一致(儘管我認爲他們大多是)。 pep8最重要的一點是:「知道什麼時候不一致 - 有時候風格指導建議不適用,如果有疑問,請使用您的最佳判斷」。 – ekhumoro

回答

0

沒有建議,因爲它太依賴於您的項目,以及您可能遇到的潛在名稱衝突。如果您還沒有QPoint對象(您自己的或可能來自不同的包),您可能會發現在需要的地方只需讀取和寫入QPoint符號更容易。

但是,如果你在未來有不同的包,還提供了一個QPoint交互,就需要無論是通過他們的父包引用它們,或者在隨後的代碼參照PyQt5Point之前使用from PyQt5.QtCore import QPoint as PyQt5QPoint語法。