Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.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 从一个脚本调用另一个脚本(以制作GUI包装器进行分析)?_Python_Import_Call - Fatal编程技术网

Python 从一个脚本调用另一个脚本(以制作GUI包装器进行分析)?

Python 从一个脚本调用另一个脚本(以制作GUI包装器进行分析)?,python,import,call,Python,Import,Call,我没有OOP方面的经验,也不是程序员,所以如果这是我应该能够找到的东西,我很抱歉。我现在有一个python程序,我写了它来做一些复杂的数据分析——它由函数组成,然后是调用那些函数的脚本,没有主sentinel等等。。没有课什么的 如果我可以将分析打包到一个程序中,将数据可视化打包到另一个程序中,等等,然后从GUI调用我想要的程序,这将非常有帮助。因此,我试图在Tkinter中编写一个简单的GUI,它允许我在运行该程序之前设置一些参数和文件路径等 我习惯了其他语言,它们鼓励将程序的不同组件打包为相

我没有OOP方面的经验,也不是程序员,所以如果这是我应该能够找到的东西,我很抱歉。我现在有一个python程序,我写了它来做一些复杂的数据分析——它由函数组成,然后是调用那些函数的脚本,没有主sentinel等等。。没有课什么的

如果我可以将分析打包到一个程序中,将数据可视化打包到另一个程序中,等等,然后从GUI调用我想要的程序,这将非常有帮助。因此,我试图在Tkinter中编写一个简单的GUI,它允许我在运行该程序之前设置一些参数和文件路径等

我习惯了其他语言,它们鼓励将程序的不同组件打包为相互调用的子程序。在python中,我的函数要么得到很长很难维护的缩进,要么得到一百万个相互调用的函数,很难跟踪

如果我尝试在一个.py中完成这一切,那将需要很长时间,没有组织。为了节省时间和复杂性,我希望将GUI程序放在一个.py程序中,并让它的小部件根据需要调用其他程序或函数。我有一种感觉,这将涉及导入我的分析程序的功能,然后调用它们。我该怎么做?我想调用的任何例程是否需要打包为函数,然后以某种方式导入


基本上,我试图摆脱10级缩进。如有任何建议,将不胜感激。我也有兴趣以某种可部署的方式打包这个程序,但可以说这可能远远高于我的工资级别

通常,短函数比长函数多

功能越多,维护起来就越困难。因此,您应该将属于一起的函数(例如,所有对某些对象的操作)放入它们自己的模块或类中。例如,如果您有多个函数可以进行一些计算,请将它们放入一个文件math_utils.py中。在主脚本中,如果在math_utils中定义了一个立方根函数,则可以执行此操作,当然:

from math_utils import cube_root
只要这两个脚本位于同一文件夹中,这种方法就有效

同样,您可以创建包含实用程序功能的多个文件。除此之外,您的函数都应该具有描述它们的功能以及作为参数的期望值和返回值的功能。这使得它更易于维护。您还应该添加描述每个文件中函数的功能的模块docstring

所以你会:

文件math_utils.py


谢谢-我认为模块的概念是我所缺乏的。需要澄清的是-模块实际上不是某个对象,它只是一个文件,它的存在是为了包含一些可导入的函数?@Nate是和否。您可以调用包含python对象、函数、类或任何模块的文件。您可以在其他脚本中导入这些脚本。但在Python中,您也可以创建模块,即在目录层次结构中包含多个脚本的包,然后可以将其用作应用程序。这基本上就是您可以通过pip.com下载的内容。我认为这是当使用if name==“main”等命令时非常有用的,当您只想从模块导入一些函数时,可以防止执行顶级代码。@Nate。在这些实用程序模块中,您可以将自动测试放在那里,以便仅在执行文件时运行,而不是在导入功能时运行。阅读更多信息,您必须找到一种在子文件夹+多个文件中构建代码的方法,以便易于跟踪和维护。使用单文件god代码不是一个解决方案。之后,我将创建一个包或单个模块,这取决于作为GUI回调入口点的GUI,也就是说,创建一个包含所有代码的大型库,GUI应该只导入其中的一个子包,并使用控制流的具体函数。如果您的GUI必须维护一个状态,那么它会变得更加复杂。启动包含Python解释器的单独程序的典型方法是使用该模块。如果愿意,可以在调用脚本中定义的自定义函数中包装对它的调用。
"""This module contains multiple utility functions performing some math"""

import math


def cube_root(x):
    """Return the cube root of the input `x`"""
    return pow(x, 1./3)


...