Skip to main content
 首页 » 编程设计

python之进口烦恼

2025年05月04日16sharpest

这是我模块的一部分:gm.py

def avg_list(list):  
    sum = 0 
    for num in list: 
        sum += num 
 
    avg = float(sum)/len(list) 
    print avg 
 
 
 
def median(list): 
    i = len(list) 
    if not i%2: # if i divided my 2 has no remainder 
 
        return (list[(i/2)-1]+list[i/2])/2.0 # return the value of this block 
 
 
    else: 
        median = sorted(list)[len(list)/2] # otherwise, when the list is sorted, the index of len(s) / 2 is the middle number. 
        return median 

当我将其另存为“gm.py”并打开一个新的脚本页面以输入以下函数时:

import gm 
def stats(list): 
 
    stats = {}  # empty dict named stats 
    stats['average'] = avg_list(list) # Stats(key)[average] = mean of the list of numbers [values] 
    stats['median'] = median(list) # same for median 
    return stats 

当我运行这个程序并输入 stats([2,3,4,5,6])... 时,我收到一条错误消息,指出全局变量 avg_list 未定义。我不确定我是否正确地进行了导入? 我是否需要执行类似... from gm import avg_list() 的操作?

请您参考如下方法:

要么引用模块对象上的函数:

import gm 
def stats(list): 
 
    stats = {}  # empty dict named stats 
    stats['average'] = gm.avg_list(list) # Stats(key)[average] = mean of the list of numbers [values] 
    stats['median'] = gm.median(list) # same for median 
    return stats 

或者将函数直接导入全局命名空间:

from gm import avg_list, median 
def stats(list): 
 
    stats = {}  # empty dict named stats 
    stats['average'] = avg_list(list) # Stats(key)[average] = mean of the list of numbers [values] 
    stats['median'] = median(list) # same for median 
    return stats 

请注意,您不应将变量命名为list。这会掩盖内置的 list() 函数/类型,如果您以后需要使用它,可能会导致混淆错误。

你可以写

stats = {}  # empty dict named stats 
stats['average'] = avg_list(list) # Stats(key)[average] = mean of the list of numbers [values] 
stats['median'] = median(list) # same for median 
return stats 

作为

stats = {'average': avg_list(list), 'median': median(list)} 
return stats # or just return the dict literal, no real need to give it a name. 

我认为您应该查看median 函数的第一个分支。是否也需要像在第二个分支中那样对列表进行排序?

您的 avg_list 函数还屏蔽了一个内置函数 sum(),您可以在此处使用它而不是手动添加:

def avg_list(list):  
    avg = float(sum(list))/len(list) 
    print avg 

最后,查看该函数的最后一行 -- 它是 printing avg,但是 stats 期望它是 返回 avg。两者不一样。