在Python中调用另一个单独的方法
我有多种方法,我不知道如何在Python3.4中组合这些方法。最终,这将是一个方法库,我将它们包装在一个类估计器中。以下是我到目前为止的情况:在Python中调用另一个单独的方法,python,nameerror,scoping,Python,Nameerror,Scoping,我有多种方法,我不知道如何在Python3.4中组合这些方法。最终,这将是一个方法库,我将它们包装在一个类估计器中。以下是我到目前为止的情况: class Estimators(): """some methods for building basic estimators. All methods. """ def average(series): return float(sum(series))/len(series) de
class Estimators():
"""some methods for building basic estimators.
All methods.
"""
def average(series):
return float(sum(series))/len(series)
def moving_average(series, n):
return self.average(series[-n:])
def main():
series = [3, 10, 12, 13, 12, 10, 12]
done = average(series)
print(done)
outputmv = moving_averge(series, 2)
print('this is the moving average:\n %d.2' % outputmv)
它抛出
`NameError: global name 'average' is not defined
另外,我想确保这是正确的体系结构。Python中定义多个始终具有(函数)依赖关系的方法的良好实践是什么?所谓函数依赖性,我的意思是有些方法可能使用在其范围之外定义的方法 在您的情况下,使用类似乎比使用类更好。模块基本上只是一个单独的python文件。因此,如果您将一个文件命名为estimators.py并将函数放入其中,则可以从另一个文件导入它们,如下所示:
from estimators import average
series = [3, 10, 12, 13, 12, 10, 12]
done = average(series)
编辑以回应评论:
如果estimators.py文件如下所示,则应导入移动平均函数:
def average(series):
return float(sum(series))/len(series)
def moving_average(series, n):
return average(series[-n:])
请注意,我将
self.average
更改为justaverage
,因为self
引用一个类的实例,而这些函数不在类中。在您的情况下,使用类似乎比使用类更好。模块基本上只是一个单独的python文件。因此,如果您将一个文件命名为estimators.py并将函数放入其中,则可以从另一个文件导入它们,如下所示:
from estimators import average
series = [3, 10, 12, 13, 12, 10, 12]
done = average(series)
编辑以回应评论:
如果estimators.py文件如下所示,则应导入移动平均函数:
def average(series):
return float(sum(series))/len(series)
def moving_average(series, n):
return average(series[-n:])
请注意,我将
self.average
更改为justaverage
,因为self
引用了一个类的实例,而这些函数不在类中。关于staticmethods的@user257297的说法是正确的,尽管在调用该方法之前还必须先调用该类。我建议两种选择:
第一个是将主菜单更改为:
def main():
series = [3, 10, 12, 13, 12, 10, 12]
done = Estimators.average(series)
print(done)
outputmv = Estimators.moving_averge(series, 2)
print('this is the moving average:\n %d.2' % outputmv)
并将@staticmethod添加到方法定义中。
另一种方法是修改类并从估计器实例化对象,并以这种方式调用方法:
class Estimators():
"""some methods for building basic estimators.
All methods.
"""
def average(self, series):
return float(sum(series))/len(series)
def moving_average(self, series, n):
return self.average(series[-n:])
...
estimators = Estimators()
estimators.average(series)
...
这样称呼他们:
class Estimators():
"""some methods for building basic estimators.
All methods.
"""
def average(self, series):
return float(sum(series))/len(series)
def moving_average(self, series, n):
return self.average(series[-n:])
...
estimators = Estimators()
estimators.average(series)
...
@user257297关于staticmethods的说法是正确的,不过在调用该方法之前还必须先调用该类。我建议两种选择: 第一个是将主菜单更改为:
def main():
series = [3, 10, 12, 13, 12, 10, 12]
done = Estimators.average(series)
print(done)
outputmv = Estimators.moving_averge(series, 2)
print('this is the moving average:\n %d.2' % outputmv)
并将@staticmethod添加到方法定义中。
另一种方法是修改类并从估计器实例化对象,并以这种方式调用方法:
class Estimators():
"""some methods for building basic estimators.
All methods.
"""
def average(self, series):
return float(sum(series))/len(series)
def moving_average(self, series, n):
return self.average(series[-n:])
...
estimators = Estimators()
estimators.average(series)
...
这样称呼他们:
class Estimators():
"""some methods for building basic estimators.
All methods.
"""
def average(self, series):
return float(sum(series))/len(series)
def moving_average(self, series, n):
return self.average(series[-n:])
...
estimators = Estimators()
estimators.average(series)
...
类的方法对于引用该类很有用,您最好将这些函数放在单独的模块(另一个文件*.py)中,并导入它们。类的方法对于引用该类很有用,您最好将这些函数放在单独的模块(另一个文件*.py)中导入它们是移动平均值导致了问题,因为它调用了平均值方法:ImportError:无法导入名称移动平均值我已经更新了答案。你现在开始工作了吗?是的。当我测试它时,有一个打字错误首先困扰了我。Thanksit是导致问题的移动平均值,因为它调用了平均值方法:ImportError:无法导入名称移动平均值我已经更新了答案。你现在开始工作了吗?是的。当我测试它时,有一个打字错误首先困扰了我。ThanksI get AttributeError:Estimators实例在我调用您提到的类实例时没有属性“moving_Average”。第一种平均方法很好用。@office206我很高兴它有帮助!如果可以,请将其标记为正确:DDoS似乎我没有这样做的权限@AgustinI get AttributeError:Estimators实例在调用您提到的类实例时没有属性“moving_averge”。第一种平均方法很好用。@office206我很高兴它有帮助!如果可以,请将其标记为正确:DDoS似乎我没有这样做的权限@阿古斯丁