2013-09-26 128 views
0

我有一個模塊一個方法:如何抑制輸出輸入模塊

def find_inverse_matrix(C, log=False): 

    n = C.shape[0] 

    Cs = C.copy() 
    i = 0 
    C = np.matrix(np.eye(n)) 
    B = np.matrix(np.eye(n)) 
    J = set(range(n)) 
    S = [0] * n 

    if log: print Cs 

    while i <= n-1: 
     if log: print '\nIteration', i 
     f = False 
     j = 0 
     ei = get_ek(i, n) 

     for j in J: 
      cj = get_ck(Cs, j) 
      alpha = (ei * B * cj)[0, 0] 
      if log: print 'alpha%s = %s' % (j, alpha) 
      if not(is_zero(alpha)): 
       f = True 
       break 

     if not(f): 
      exit('Inverse matrix is not exist') 

     J.remove(j) 
     S[j] = i 
     C[:, i] = Cs[:, j] 
     if log: print 'C%s:\n%s' % (i, C) 
     D = get_Dkz(i, B * C[:, i]) 
     if log: print 'D%s:\n%s' % (i, D) 
     B = D * B 
     if log: print 'B%s:\n%s' % (i, B) 

     i += 1 
    if log: print '\n S = ', S 

    if log: print 'Result' 
    R = construct_matrix(B, S) 
    if log: print R 

    if log: print '\nCheck result:' 
    if log: print Cs * R 
    return R 

如果我把這個方法從這個文件將會顯示所有的打印,但如果我從另一個電話如果所有打印應該被抑制。現在,我在每次印刷之前使用檢查,但是它如何在'pythonic'風格中簡單又美觀?

+1

[Python»文檔»Python HOWTOs»Logging HOWTO](http://docs.python.org/2/howto/logging.html) –

+0

感謝您的支持。我知道日誌模塊,但目前模塊已經用'print'語句編寫。 –

回答

2

通常情況下,print是該語言的聲明。但是,如果您將行from __future__ import print_function添加到您的導入,那麼它將用作函數。這意味着兩件事:

a)您需要使用此功能 - 意爲print(Cs)而不是print Cs

b)你可以覆蓋它,因爲在python函數中是可以玩的對象。

您可以定義您自己的「my_print」功能,您可以稍後更改而不是內置print

例子:

>>> from __future__ import print_function 
>>> _print_ = print 
>>> def myprint(*arg, **kwarg): 
...  _print_("yeah.") 
...  _print_(*arg,** kwarg) 
... 
>>> myprint("ok") 
yeah. 
ok 
>>> print = myprint 
>>> print('3') 
yeah. 
3 
>>> 

所以只寫你myprint功能,使得它會檢查之前,「日誌」,並打印件應該是一樣的。或者僅在您不想打印時才覆蓋print

+0

在這種情況下,我只需要修改導入的模塊,對吧?請參閱示例https://dpaste.de/HPHdw/ –

+0

輸出位於底部?然後它給了你想要的結果,對吧? –

+0

是的,它在這裏。好吧。 –

1

if __name__ == '__main__':只會在文件直接執行時才執行代碼塊,而不是作爲模塊加載。你可以在那裏設置一個標誌來打開日誌。

更爲pythonic的方式可能是將日誌功能傳遞到模塊而不是標誌。這樣你可以傳入一個空的函數來抑制日誌記錄。