Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.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中调用另一个单独的方法_Python_Nameerror_Scoping - Fatal编程技术网

在Python中调用另一个单独的方法

在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

我有多种方法,我不知道如何在Python3.4中组合这些方法。最终,这将是一个方法库,我将它们包装在一个类估计器中。以下是我到目前为止的情况:

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
更改为just
average
,因为
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
更改为just
average
,因为
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似乎我没有这样做的权限@阿古斯丁