首页 > 解决方案 > 从 main() 中提取两个或三个较小的函数以更轻松地查找错误

问题描述

我想从较大的 main 函数中提取较短的函数,以使其更具可读性并且更容易在不删除功能的情况下找到错误

我正在考虑将其拆分为中间,如“def calc_mean():”所示。但是问题是此函数中未定义数据等。我应该如何更改这些以便原始程序仍然可以工作,尽管被分为2?

标签: python

解决方案


这是一个永无止境的循环。 user_input调用main,然后main调用user_input,然后user_input调用main等等。

修复 1

filename = input(user_input())从主函数中删除并作为filename参数从user_input. 在这种情况下,整个脚本应该首先调用user_input函数。

修复 2

filename = input(user_input())使用filename = user_input()调整功能删除,user_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}")

推荐阅读