Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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 从main()中提取两个或三个较小的函数以更容易地查找错误_Python - Fatal编程技术网

Python 从main()中提取两个或三个较小的函数以更容易地查找错误

Python 从main()中提取两个或三个较小的函数以更容易地查找错误,python,Python,我想从较大的主函数中提取较短的函数,以便在不删除功能的情况下使其更可读,更容易查找错误 我正在考虑将其拆分为中间部分,如“def calc_mean():”所示。然而,问题是此函数中没有定义数据和其他内容。我应该如何更改这些内容,以便原始程序即使被拆分为2个,仍能正常工作?这是一个永无止境的循环。 user\u input调用main,然后main调用user\u input,然后user\u input调用main,依此类推 修正1 从主函数中删除filename=input(user\u i

我想从较大的主函数中提取较短的函数,以便在不删除功能的情况下使其更可读,更容易查找错误

我正在考虑将其拆分为中间部分,如“def calc_mean():”所示。然而,问题是此函数中没有定义数据和其他内容。我应该如何更改这些内容,以便原始程序即使被拆分为2个,仍能正常工作?

这是一个永无止境的循环。
user\u input
调用
main
,然后
main
调用
user\u input
,然后
user\u input
调用
main
,依此类推

修正1

从主函数中删除
filename=input(user\u input())
,并将
filename
作为参数从
user\u input
中传递。在这种情况下,整个脚本应首先调用
user\u input
函数

修正2

删除
filename=input(user\u input())
filename=user\u input()
adjust
user\u input
函数,使其仅请求用户输入,然后返回该输入。在这种情况下,脚本应首先调用
main
函数

另外,在脚本的底部应该是

if __name__ == '__main__': # not `main`
     call_some_function()
更新

def user_input(): # adjust this if you need
     filename = input()
     return filename

def read_data(filename):
    data = dict()              
    with open(filename, 'r') as h:
        for line in h:
            four_vals = line.split(',')
            batch = four_vals[0]
            if not batch in data:
                data[batch] = []
            data[batch] += [(float(four_vals[1]), float(four_vals[2]), float(four_vals[3]))]
    return data


def calc_mean(sample):
    if len(sample) == 0:
        return
    n = 0
    x_sum = 0
    for (x, y, val) in sample:
        if x**2 + y**2 <= 1:
            x_sum += val
            n += 1
    average = x_sum / n
    return average


def main():
    '''
    This is the main body of the program.
    '''
    filename = user_input()
    data = read_data(file_name)
    for batch, sample in data.items():
        average = calc_mean(sample)
        if average is not None:
            print(f"{batch}\t{average}")
        else:
             print(f"{batch}\t{No data}")
def user_input():#如果需要,请调整此选项
filename=input()
返回文件名
def read_数据(文件名):
数据=dict()
打开(文件名“r”)为h时:
对于h中的行:
四个值=行分割(',')
批次=四个批次[0]
如果未批量输入数据:
数据[批次]=[]
数据[批处理]+=[(浮点(四个值[1])、浮点(四个值[2])、浮点(四个值[3])]
返回数据
def计算平均值(样本):
如果len(样本)==0:
返回
n=0
x_和=0
对于样品中的(x,y,val):

如果x**2+y**2,可能您忘了在文件末尾调用
main()
?我在程序末尾有“if name=='main':main(),它没有多大帮助。最大的问题是,我仍然不知道如何从原始的主函数中准确地提取和定义函数。谢谢你的回答,我使用了fix2,它工作了。在这里,除了用户输入之外,您是否发现了任何可以从原始main()中提取的潜在函数?这是一个项目,我将不得不使它更容易阅读,并使它更容易发现错误。谢谢1.函数读取数据并进行准备。2.函数来处理数据。这也是我的想法,基本上是将main()从中间拆分。但是,我不确定如何在另一个函数中使用一个函数中的变量?我正在努力让它延续到“新”功能。我会提供一个编辑我提供了一个小编辑,我没走多远,你介意帮我再进一步吗?