以下是我的模块的一部分: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。我不确定我是否正确进行导入? 我需要做一些像gm import avg_list()吗?
答案 0 :(得分:4)
引用模块对象上的函数:
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
最后,请查看该函数的最后一行 - print
avg
,但stats
期待它return
avg
。两者不一样。
答案 1 :(得分:2)
您需要首先放置模块名称(gm.avg_list()
和gm.median()
),如下所示:
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
一些参考链接和更多信息:
PEP 8 - Style Guide for Python Code
A guide to Python Namespaces关于from blah import foo
和import blah
- 导入SomeModule
这是进行导入的最简单方法,通常建议使用。您 如果您使用模块,则可以访问模块的命名空间 将名称作为前缀。这意味着您可以在程序中使用名称 这些与模块中的相同,但您将能够使用 他们都。当您导入大量数据时,它也很有用 您可以看到特定名称属于哪个模块的模块。
来自SomeModule的
- 导入SomeName
这会从模块中导入一个名称(或几个,以逗号分隔) 命名空间直接进入程序的。要使用您导入的名称, 你不再需要使用前缀,只需要直接使用名称。这个可以 如果你确定知道你只需要使用几个名字就会很有用。 缺点是您不能使用您导入的名称 在你自己的程序中。例如,您可以使用add()而不是 Integer.add(),但是如果你的程序有add()函数,你就输了 访问Integer的add()函数。