Python继承模块导入速度
我会把这个问题概括起来,因为我觉得很多人都做同样的事情,我找不到一个一致的答案 使用PyQt(4或5)制作每个人都需要的程序主要有以下几行:Python继承模块导入速度,python,python-3.x,import,pyqt,Python,Python 3.x,Import,Pyqt,我会把这个问题概括起来,因为我觉得很多人都做同样的事情,我找不到一个一致的答案 使用PyQt(4或5)制作每个人都需要的程序主要有以下几行: from PyQt5 import QtCore, QtGui from PyQt5.QtWidgets import QWidget 对于每个想要创建的小部件,他们或多或少都需要写这两行代码。有没有一种方法可以(快速)导入所有这些行,而不必为每个子窗口小部件导入它们 为了进一步澄清,假设我有一个主类MainWindow,它调用它的子小部件child
from PyQt5 import QtCore, QtGui
from PyQt5.QtWidgets import QWidget
对于每个想要创建的小部件,他们或多或少都需要写这两行代码。有没有一种方法可以(快速)导入所有这些行,而不必为每个子窗口小部件导入它们
为了进一步澄清,假设我有一个主类MainWindow
,它调用它的子小部件child
from PyQt5 import QtCore, QtGui
from PyQt5.QtWidgets import QWidget
from ChildWidget import Child
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
widget1 = Child(self)
....
文件ChildWidget
的结构与
from PyQt5 import QtCore, QtGui
from PyQt5.QtWidgets import QWidget
class Child(QWidget):
def __init__(self, parent):
super(Child, self).__init__(parent)
....
(当然,每个小部件的导入会有所不同,但这两个小部件始终存在。)
我知道,除了在ChildWidget
中进行常规的两次导入之外,我还可以从主窗口导入*
来导入main窗口中的所有内容,但我觉得这很慢,因为它是循环导入所有内容
因此,我的问题是,随着小部件数量的增加,如果速度是一个主要问题,那么在每个小部件中导入相同功能的最佳方式是什么?这些似乎是主要的可能性(忽略小的变化):
模块名称空间:
from PyQt5 import QtCore, QtGui, QtWidgets
widget = QtWidgets.QWidget()
具有别名的模块命名空间:
from PyQt5 import QtCore as qc, QtGui as qg, QtWidgets as qw
widget = qw.QWidget()
明星进口:
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
widget = QWidget()
全局命名空间:
from PyQt5 import Qt
widget = Qt.QWidget()
全球之星导入:
from PyQt5.Qt import *
widget = QWidget()
个人进口:
from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtCore import QColor, QFont
from PyQt5.QtCore import (
QApplication, QWidget, QVBoxLayout, QPushButton,
QLineEdit, QListWidget,
)
选项3用数百个永远不会使用的名称污染模块名称空间,情况也是如此。选项4看起来很诱人,但如果您关心应用程序的启动时间,它是一个糟糕的解决方案,因为它导入每个模块,包括像QtWebEngine
这样的资源消耗。选项5结合了选项3和选项4最糟糕的方面,但它确实让你得到了一切
选项1(以及选项2,在较小程度上)的主要好处是,它绝对清楚地表明了名称的来源。这意味着它是理想的教程和例子,例如。额外的清晰性是以更加详细为代价的,但是,如果您的编辑器具有自动完成功能,这并不是什么大问题。我个人比较喜欢选项6,因为它似乎是最好的全面折衷方案。Python导入每个程序只执行一次。任何重复的import语句都只需查找缓存的版本,以您建议的方式使用时会产生很少的开销。没有必要在子模块中避免它们。