2010-11-05 71 views
1

所以,我一直在python编程,我遇到了这个非常恼人的问题。我写了一个小型矩阵库,并开始在另一个模块中使用它(例如import matrixlib)。我会发现一个bug,修复它并再次运行程序。错误仍然存​​在。我改变了python代码,但python似乎没有读取更改

我想扔几张打印报表来看看发生了什么,但是他们不打印。我最终发现我的更改没有用python注册。所以我开始删除.pyc文件(预编译的python),但没有帮助。

我最终放弃了,直接从矩阵库文件开始编程,但现在这个问题已经回来。我在一份印刷声明中发现了一种方法,解决了这个问题,然后把它拿出来了。但它仍然打印。我甚至在一个不同于IDLE的文本编辑器中搜索'print',但在代码中只发现了一条打印语句。

这实际上并不是一个代码问题,我可能会以某种方式破坏我的python安装。 (这只发生在我的Windows盒子,而不是我的Linux盒子)。如果你想看代码,请随意。 hiesenbug-print语句在我的代码中被注释掉,但仍然执行。

def det(self): 
     #Had better be a square matrix. 
     if self.colCount() != self.rowCount(): 
      return None 
     #Are we a 1x1 matrix? 
     if self.colCount() == self.rowCount() == 1: 
      return self.a[0][0] 
     #Are we a 2x2 matrix? 
     if self.colCount() == self.rowCount() == 2: 
      return self.a[0][0]*self.a[1][1]-self.a[1][0]*self.a[0][1] 
     #Not a 2x2... so lets start recursing. 
     d = 0 
     for e in range(0,self.colCount()): 
      tmp = partition(self.a, 0, e) 
      if e%2 == 0: 
       d = d + self.a[0][e]*self.detRecursive(tmp) 
      else: 
       d = d - self.a[0][e]*self.detRecursive(tmp) 
     #print d 
     return d 

    def detRecursive(self, matrix): 
     m = Matrix() 
     m.setMatrix(matrix) 

     return m.det() 

    def partition(a, r, c): 
     out = [] 
     for row in range(0, len(a)): 
      if r != row: 
       out.append([]) 
       for col in range(0, len(a[0])): 
        if col != c: 
         out[-1].append(a[row][col]) 
     return out 
+1

不是你的问题,但你可以使用numpy包中的矩阵。它更快,并包含您需要的所有方法:http://docs.scipy.org/doc/numpy/reference/generated/numpy.matrix.html。决定因素在线性代数分组http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.det.html#numpy.linalg.det中。 leslie函数也在scipy中实现:http://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.leslie.html – SiggyF 2010-11-05 23:03:39

+0

由于它不是代码问题,为什么包含所有代码?为什么不提供显示问题的最小**代码示例? – 2010-11-05 23:22:46

+0

这是一个课程项目,我在那里编写图书馆。至于代码,我无法打折我实际犯了一个错误的可能性。无论如何,它在一个很好的格式化代码块中...... – mamidon 2010-11-05 23:42:32

回答

4

我认为,当您安装包你第一次做的事:

python setup.py install 

而不是:

python setup.py develop 

,因为当你做setup.py install的setup.py只是复制系统路径中的软件包文件,所以每次在软件包文件中进行更改时,都必须在另一方面重新运行setup.py install 以'开发模式'安装你的软件包,这意味着它只是为你的“本地”软件包文件创建一个链接(一个蛋),以便检测到库“本地”文件的每一个变化(它只是一个链接)

希望这将有助于:)

1

右键你在主程序中导入matrixlib后:

print(repr(matrixlib)) 
raise SystemExit 

检查实际加载模块的位置。