调用方法

时间:2016-05-20 04:54:45

标签: python python-3.x

import math

class Vector():

    vA = [3.183, 7.627]

    def magnitude(vector):
        sum = 0
        i = 0
        while i < len(vector):
            sum += vector[i]
            i += 1
        return math.sqrt(sum)

    def unitVector(vector):
        print( 1 / (magnitude(vA) * vA))

我正在尝试编码一些线性代数并计算上述矢量'vA'的单位矢量。当我运行代码时,我得到NameError: global name 'magnitude' is not defined。我不明白为什么我只是从另一个函数调用一个函数时遇到问题。

我是python的初学者,我假设我对类和函数有误解,但我查看了文档,找不到我要找的答案。

1 个答案:

答案 0 :(得分:1)

您的代码中有几处错误:

  • def magnitude(vector)应为def magnitude(self, vector)
  • def unitVector(vector)应为def unitVector(self, vector)
  • magnitude(vA)应为self.magnitude(vA)

编辑:

编写类的更好方法是在Python中使用OOP概念,因此如果将vector作为实例变量,则不必将vector作为函数参数传递。

你的课程可以这样改写:

import math

class Vector():

    def __init__(self, vector):
        self.vector = vector


    def magnitude(self):
        sum = 0
        i = 0
        while i < len(self.vector):
            sum += self.vector[i]
            i += 1
        return math.sqrt(sum)

    def unitVector(self):
        print( 1 / (self.magnitude() * self.vector))

vA = [3.183, 7.627]
vec = Vector(vA)
vec.unitVector()

请注意,工作。因为在unitVector中,Python并不知道如何将浮点数乘以列表(self.magnitude()返回浮点数,self.vector是列表)。你可能想重做这部分。