Cameron Pulsford wrote:
Hey everyone, I am extremely stumped on this. I have 2 functions..
def _determinant(m):
return m[0][0] * m[1][1] - m[1][0] * m[0][1]
def cofactor(self):
"""Returns the cofactor of a matrix."""
newmatrix = []
for i, minor in enumerate(self.minors()):
newmatrix.append(_determinant(minor.matrix) * ((i%2) * -1))
return newmatrix
And I get the following error when I try to run a.cofactor()...
"NameError: global name '_determinant' is not defined"
When I put the _determinant function nested within the cofactor
function it works fine. Normally I would do this, but a lot of other
methods use the _determinant method. They are both in the same class,
and they are at the same level, they are even in that order so I know
it should be able to see it. I have a lot of functions that call
other functions in this class and everything is fine. [Also for the
picky, I know my cofactor method isn't mathematically correct yet ;-)
] Am I missing something obvious here? Also if it helps the rest of
the code is
herehttp://github.com/dlocpuwons/pymath/blob/d1997329e4473f8f6b5c7f11635dbd719d4a14fa/matrix.py though
it is not the latest.
Maybe someone has already answered...
Looks like cofactor is in a class, so I'm assuming _determinant is in
that class as well.
3 solutions:
- declare _determinant outside of the class, making it a private module
function
- declare _determinant as method of the instance : def _determinant(self)
- if you want to keep _determinant as part of your class, it's up to you
but you have to declare it as staticmethod (goolge it for details)
For isntance :
class MyClass
def _determant()m:
...
_determant = staticmethod(_determinant)
def cofactor(self):
...
x = MyClass._determinant(y) # this is how you call static Class
method, but rarely these methods are set private (_ prefix)
Jean-Michel
--
http://mail.python.org/mailman/listinfo/python-list