Python 使用main()是否正确,但没有';不要将所有内容都放在def main()中:?
基本上,我在Python 使用main()是否正确,但没有';不要将所有内容都放在def main()中:?,python,project,pyqt5,Python,Project,Pyqt5,基本上,我在top.py中的代码是这样的。我正在尝试创建一个PyQt5项目,并且能够分别测试每个对话框/窗口 import sys, os if __name__ == '__main__': os.chdir('../') sys.path.insert(0,'.') #import * else: pass #from . import * #from common import * from PyQt5.QtWidgets import * fr
top.py
中的代码是这样的。我正在尝试创建一个PyQt5项目,并且能够分别测试每个对话框/窗口
import sys, os
if __name__ == '__main__':
os.chdir('../')
sys.path.insert(0,'.')
#import *
else:
pass
#from . import *
#from common import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
def main():
global window
window = MainWindow()
window.showUI()
class MainWindow(QWidget):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
def showUI(self):
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
main()
sys.exit(app.exec_())
这是个坏习惯吗
项目结构:
main.py
gui/
__init__.py
top.py
common/
__init__.py
common.py
一个好的做法是有一个“测试”文件夹,每个待测试的“窗口”有一个文件。例如,“toy_test.py”文件,您可以在其中导入所有需要的内容,例如“toy.py”。然后剪切并粘贴此测试文件中的主块
但是您这样做的方式是正确的,因为只有当脚本是直接调用的脚本时,才会调用“if main”块。一种技术上完全可选的常见设计类似于
def real_stuff():
# ... your actual code ...
def main():
# some setup when invoked from the command line
# maybe print a hostile welcome message? (No, don't.)
real_stuff()
if __name__ == '__main__':
main()
最后一个条件的目的是使您的脚本能够从另一个脚本导入,但也可以从命令行使用python
运行。当您导入时,您不希望程序立即开始运行,因此起点取决于此
基本上你可以把你所有的东西都放在defmain()
:里面如果uuu name\uuuuuu=='uuu main\uuuuu':
,它的工作原理完全一样。当它不是完全琐碎的时候,最好将它封装在一个单独的函数中,这样人类读者可以更容易地理解逻辑,但就Python而言,它几乎是一样的(除了一个额外函数调用的琐碎开销)
一个重要的考虑因素是如何使您的代码模块化到可以重用的程度。如果real\u stuff()
是一个有用的功能,您可能希望将来从其他程序调用它,那么一定要将它变成一个独立的函数,它不在def main()
内,甚至不在内,如果uuuu name\uuu=='\uuu main\uu'
。如果它的代码片段本身对其他程序有用,那么也可以将它们重构为单独的函数,并在需要时从其他程序调用它们
为了使这些函数在编程上有用,它们可能不应该进行任何面向用户的交互,因此可能需要将它们考虑到一个单独的函数中——同样,不一定在main()
中,而是与代码分开,这对将来从其他程序中使用有意义。无论用户交互或启动代码以使其独立运行,请将其放入main()
(或者,如果它非常简单,请不要为其创建单独的函数)。实际上,在main.py
中,只有两行从gui导入top.main()
之前,我使用了top.load()
,但当我看到这种可能性时,我改为top.main()
。另外,我想知道我是否应该给文件命名为main.py
?Python不关心文件的名称,只要它不包含对import
有问题的字符(破折号和点是示例,您不能import fun project
,因为在Python标识符中不允许破折号)。通常,称它为实际描述其功能的东西——如果这是一个计算器应用程序,calculator.py
将是一个很好的名称。从gui导入top
调用top.py
时,一般的调用方式是什么top.load()
,而不是top.main()
?我没有看到def load
,因此根据您向我们展示的内容,答案是否定的。如果有一个load()
函数,从您的角度来看,它做的事情比main()更好
那么我当然更喜欢这样。也许我应该对这一点稍加说明,我真的不知道Qt/PyQt5或它可能添加到汤中的任何约定。