如何在另一个过程中调用一个过程

时间:2018-12-28 15:04:21

标签: python python-3.x function

我正在创建一个大的.py文件,该文件可以导入并用于求解数学公式。我想将公式存储在一个名为input1_input2_input3()的过程中:例如,正式的distance = speed * time称为dis_spe_tim()。

到目前为止的代码是:

def dis_spe_tim():
    def distance(speed, time):
        result = speed*time
        unit = input("What unit are you measuring the distance in?")
        print(resule,unit)

    def speed():
        print("speed")

并且我希望用户像这样使用它:

import equations #name of the .py file
from equations import *
dis_spe_tim.distance(1,2)

不幸的是,这是我第一次做这样的事情,所以我完全不知道如何在过程内部调用过程并提供其参数。

1 个答案:

答案 0 :(得分:3)

简短的回答:您不能。嵌套函数在定义它们的函数中是局部的,并且仅在外部函数执行期间存在(def是一个可执行语句,在运行时会创建一个函数对象并将其绑定到其在封闭名称空间中的名称)

规范的python解决方案是将模块用作名称空间(嗯,Python模块主要是名称空间),即每个“公式”都有一个不同的模块,并在模块的顶层定义功能:

# dis_spe_tim.py
def distance(speed, time):
   # code here

def speed():
   # code here

然后将所有这些模块放入equations包中(通常是:一个包含模块的文件夹和一个__init__.py文件)。然后,您可以执行以下操作:

from equations import dis_spe_tim
dis_spe_tim.distance(1,2)

您可以在此处查看有关模块和软件包的更多文档:https://docs.python.org/3/tutorial/modules.html#packages

还要注意

1 /“星号导入”(也称为“通配符导入”),即highly discouraged是{{3}},因为它们会使代码更难于阅读和维护,并可能导致意外情况(有时细微到很难发现破损的地方。

2 /您不应将“域”代码(进行有效计算的代码)与UI代码(与用户进行通信的代码)混合使用,因此对from somemodule import *input()等的任何调用均应不在“域”代码中。这是使您的域代码可用于不同的UI(命令行,基于文本(诅咒等),GUI,Web等)的关键,而且非常简单地确保您的域代码可轻松地进行隔离测试(单元测试...)。