Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python继承模块导入速度_Python_Python 3.x_Import_Pyqt - Fatal编程技术网

Python继承模块导入速度

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

我会把这个问题概括起来,因为我觉得很多人都做同样的事情,我找不到一个一致的答案

使用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

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语句都只需查找缓存的版本,以您建议的方式使用时会产生很少的开销。没有必要在子模块中避免它们。