小编典典

是否应避免通配符导入?

python

我正在使用PyQt并遇到此问题。如果我的进口货单是:

from PyQt4.QtCore import *
from PyQt4.QtGui import *

然后pylint会发出数百个“未使用的导入”警告。我很犹豫是否将其关闭,因为可能还有其他未使用的导入实际上很有用。另一种选择是这样做:

from PyQt4.QtCore import Qt, QPointF, QRectF
from PyQt4.QtGui import QGraphicsItem, QGraphicsScene, ...

我最终在QtGui行上有9个类。第三种选择是:

from PyQt4 import QtCore, QtGui

然后在我使用它们时在所有类前面加上QtCore或QtGui。

在这一点上,我对我最终在项目中完成的工作还是不确定的,尽管从我的角度来看,最后一个似乎是最痛苦的。这里有哪些常见做法?是否有技术原因使用一种样式而不是另一种样式?


阅读 225

收藏
2020-12-20

共1个答案

小编典典

您的问题标题的答案是“是”:我建议不要使用from ... import *,并且在另一个最近的答案中讨论了原因。简而言之,合格名称是
名称,裸名非常有限,因此在显示的名称中,“第三种选择”是最佳的(因为您将使用合格名称,而不是裸名)。

(具有合格名称的优点包括:易于伪造/模拟以用于测试目的,降低了因意外重新绑定而引起的未被注意的错误的风险已消除,可以将“跟踪类”中的顶级名称“半伪造”用于记录目的确切地说,您正在使用什么并简化了诸如剖析之类的活动-
缺点,几乎没有…import this在交互式解释器提示符下,还请参见Python Zen中最后但并非最不重要的版本。

同样好,如果您讨厌要说的7个多余字符QtCore.whatever,那就是缩写-from PyQt4 import QtCore as Crfrom PyQt4 import QtGi as Gu(然后使用Cr.blahGu.zorp)等。像所有的缩写,它的简洁和清晰之间的折衷风格(你宁愿名的变量count_of_all_widgets_in_the_inventorynum_widgets或者x?往往是中间的选择是最好的,但并不总是;-)。

顺便说一句,我不会as在一个from或一个语句中使用多个子句import(可能会造成混淆),我宁愿有多个语句(如果任何导入带来问题,也更容易调试,如果将来更改导入,则可以进行编辑,…)。

2020-12-20